Seite 1 von 1

getSupportedServiceNames liefert "Objektvariable nicht belegt"

Verfasst: Di 20. Aug 2019, 23:47
von Reth
Hallo zusammen,

ich probiere gerade eine Kopierroutine zu schreiben, die mir anhand der Selektionen in einem Blatt alle darin enthaltenen Zeilen in ein anderes Blatt kopiert.
Dabei habe ich eine Fallunterscheidung, die je nach einzelner Zelle/Zeile, einer selektierten Range oder mehrerer selektierter Ranges unterscheidet.
Leider scheint die Prüfung auf eine selektierte Range nicht zu klappen, daher wollte ich mir mal die supported Services ausgeben lassen. Wenn ich allerdings getSupportedServiceNames() im Rahmen einer MsgBox verwende, bekomme ich immer den Fehler: "Objektvariable nicht belegt" - selbst wenn ich nur eine Zelle auswähle (bei dieser klappt die Prüfung auf supported service!). Denke mal, dass die Ausgabe anders funktionieren muss.

Das If, das auf ein Range prüft wird nicht durchlaufen - getImplementationName() im Falle der Selektion mehrerer Zellen einer Spalte innerhalb einer Range gibt aus: ScCellRangeObj

Was ist da noch falsch? Wieso läuft die Prüfung auf Range noch falsch und was bedeutet der Fehler mit der Objektvariable, wenn ich mir die Services ausgeben lassen will?
Der Debug der Services zeigt, dass bei Selektion zumindest XSheetCellRange enthalten ist, warum aber nicht auch SheetCellRange?

Dank euch schon mal!

Ciao

HIer noch der Code-Ausschnitt:

Code: Alles auswählen

	oDoc = ThisComponent
	oSel = oDoc.getCurrentSelection()
	srcSheet = odoc.currentcontroller.activesheet
	srcRangeAddress = srcSheet.getRangeAddress()
	
	If Not isNull(oSel) Then
		' only one cell selected for copying
		If oSel.supportsService("com.sun.star.sheet.SheetCell") Then
'MsgBox "One Cell selected and it contains: " & oSel.getString() & " " & oSel.CellAddress.Row
			srcRangeAddress.StartRow = oSel.CellAddress.Row
			srcRangeAddress.EndRow = oSel.CellAddress.Row
			srcSheet.copyRange(tgtRangeAddress, srcRangeAddress)
		End If
		If oSel.supportsService("com.sun.star.sheet.SheetCellrange") Then
MsgBox "One Cell Range selected"
			srcRangeAddress.StartRow = oSel.CellRangeAddress.StartRow
			srcRangeAddress.EndRow = oSel.CellRangeAddress.EndRow
			srcSheet.copyRange(tgtRangeAddress, srcRangeAddress)
		End If
		If oSel.supportsService("com.sun.star.sheet.SheetCellRanges") Then
			MsgBox "Multiple Cell Ranges selected. Total=" & oSel.getCount()
		End If
MsgBox "ServiceNames: " & oSel.Dbg_SupportedInterfaces
	Else
		MsgBox "Current Selection is null"
	End If

Re: getSupportedServiceNames liefert "Objektvariable nicht belegt"

Verfasst: Mi 21. Aug 2019, 00:15
von Reth
Ok, ein Problem schon gefixt: Hatte nen Typo in

Code: Alles auswählen

If oSel.supportsService("com.sun.star.sheet.SheetCellrange")
=> Range muss man groß schreiben!