Seite 1 von 1

Fehlermeldung Objektvariable nicht belegt

Verfasst: Mi, 16.03.2016 15:03
von Brischniak
Hallo, ich habe folgende Makro-Funktion zum Ändern des Tabellenblattnamens erstellt:

Code: Alles auswählen

Function AENDERE_BLATTNAME(x)
dim oSheet as Object
oSheet = ThisComponent.CurrentController.ActiveSheet
oSheet.Name = oSheet.getCellRangeByName("B1").String
End Function
.

Nun schreibe ich bspw. in Zelle A1 die Formel

Code: Alles auswählen

=AENDERE_BLATTNAME(A2)
,
sodass der Blattname immer dann aktualisiert wird, wenn sich der Wert in A2 ändert.
Das funktioniert auch wunderbar. Nur jedesmal, wenn ich das gesamte Dokument schließe und erneut öffne, kommt die Fehlermeldung "Objektvariable nicht belegt." Wie kann ich das beheben?

Danke

Re: Fehlermeldung Objektvariable nicht belegt

Verfasst: Mi, 16.03.2016 15:21
von Stephan
Nur jedesmal, wenn ich das gesamte Dokument schließe und erneut öffne, kommt die Fehlermeldung "Objektvariable nicht belegt."
Das dürfte daran liegen das das ThisComponent-Objekt noch nicht voll verfügbar ist wenn beim Öffnen die Funktion aufgerufen wird.
Wie kann ich das beheben?
Da ich annehme das Änderungen des Blattnamens nur bei geöffneter Datei stattfinden müssen [1], sollte es genügen eine Fehlerbehandlung hinzuzufügen:

Code: Alles auswählen

Function AENDERE_BLATTNAME(x)
On Error Resume Next
dim oSheet as Object
oSheet = ThisComponent.CurrentController.ActiveSheet
oSheet.Name = oSheet.getCellRangeByName("B1").String
End Function
[1]
es bestünde ja auch grundsätzlich die Möglichkeit das XML der Datei direkt zu bearbeiten, dann wäre im Falle des späteren Öffnens der Datei u.U: der Zellwert der Zelle mit der benutzerdefinierten Funktion nicht aktuell wenn dieser nicht direkt beim Öfffnen aktualisiert würde. Diese Möglichkeit dürfte aber in 99% der Praxisfälle akedemischer Natur sein.


Gruß
Stephan

Re: Fehlermeldung Objektvariable nicht belegt

Verfasst: Mi, 16.03.2016 15:24
von Karolus
Hallo


Nimm das hier:

Code: Alles auswählen

Function aendere_namen(event)
cell = event
address = cell.CellAddress
r = address.Row
c = address.Column
If (c = 1) And (r = 0) Then  '# Zelle B1'
	cell.Spreadsheet.Name = cell.String
End if
End Function
und binde das ans Ereignis `Inhalt geändert` des Tabellenblatts ( →→Rechtsklick Tabreiter→Ereignisse … )

Re: Fehlermeldung Objektvariable nicht belegt

Verfasst: Mi, 16.03.2016 16:16
von Brischniak
Prima, die simple Fehlerbehandlung genügt mir schon. Danke, Stephan.
Vielen Dank aber auch für deine Antwort, Karolus.