Merere Bereiche bei "getCellRangeByName"

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

H-J-B
Beiträge: 1
Registriert: So, 17.05.2020 11:39

Merere Bereiche bei "getCellRangeByName"

Beitrag von H-J-B »

Hallo zusammen,

in der Vergangenheit habe ich sehr viel mit Excel gearbeitet. Wobei in fast allen Tabelle Makros verwendet wurden. Seit ein paar Monaten steige ich mit den verschiedenen Tabellen auf Calc um und versuche auch die Funktionalität der Makros mitzunehmen. Aktuell verzweifle ich daran mehrere Bereiche bei "getCellRangeByName" zu definieren. Ein paar Lösungen habe ich in den Foren gefunden, aber sie funktionieren bei mir nicht. Ich bekomme immer Fehlermeldungen.
Was habe ich gemacht:

Code: Alles auswählen

sub schreib_x(ereignis)

oDoc=thiscomponent

' Versuch 1
'oBereich = ereignis.Spreadsheet.getCellRangeByName("c7:h25")

'Versuch 2
oBereich= ereignis.Spreadsheet.getCellRangeByName("c7:h25;o9:t27")

'Versuch 3
'oBereich=oDoc.sheets(0).getCellRangeByName("c7:h25;o9:t27")

'Versuch 4
'oBereich=oDoc.sheets(0).getCellRangeByName("c7:h25")


if oBereich.queryIntersection(ereignis.rangeaddress).count=0 then exit sub

	If ereignis.String = "X" Then
  	 	ereignis.String = ""
	Else
   		ereignis.String = "X"
End If

end sub
Nur Versuch 1 und 4 funktionieren

Bei den beiden anderen erscheint:
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.uno.RuntimeException
Message: .
Liegt das an irgendwelchen Einstellungen oder habe ich noch etwas vergessen?
Danke, trotz schönes Wetter, für eure Hilfe.
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: Merere Bereiche bei "getCellRangeByName"

Beitrag von mikeleb »

Hallo,
sinnvoller wäre dieser Thread im Bereich "Programmierung" angesiedelt.
.getCellRangeByName kann nur einen Bereich aufnehmen. Für das, was du vorhast, würde ich einfach über beide Bereiche iterieren.

Code: Alles auswählen

sub schreib_x(ereignis)

	oDoc=thiscomponent
	'Array mit den Bereichen als String
	aBereiche=Array("c7:h25","o9:t27")
	'Durchlauf durch alle Teilbereiche
	For i= 0 to Ubound(aBereiche)
		oBereich=ereignis.Spreadsheet.getCellRangeByName(aBereiche(i))
		If oBereich.queryIntersection(ereignis.rangeaddress).count>0 then
			If ereignis.String = "X" Then
  	 			ereignis.String = ""
			Else
   				ereignis.String = "X"
   			End If
		End If	
	Next

end sub
Wenn es mehr Bereiche sind, kann man die Schleife natürlich noch abkürzen, aber so sollte es reichen.
Gruß,
mikeleb
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Merere Bereiche bei "getCellRangeByName"

Beitrag von Stephan »

mehrere Bereiche in ein Objekt (= .SheetCellRanges) wird selten verwendet und ist wohl nicht so bekannt. So geht es:

Code: Alles auswählen

sub mehrere_Bereiche()

	Dim a(1)
	bereiche = ThisComponent.CreateInstance("com.sun.star.sheet.SheetCellRanges")
	blatt = ThisComponent.Sheets(0)
	
	a(0) = "c7:h25"
	a(1) = "o9:t27"
	
	For i = LBOUND(a()) To UBOUND(a())
		bereiche.addRangeAddress(blatt.getCellRangeByName(a(i)).getRangeAddress(), False)
	Next i
	
	'nun ist beispielsweise möglich:
	ThisComponent.getCurrentController.Select(bereiche)

end sub


Gruß
Stephan
Antworten