🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Macroverwaltung für eine nutzerdefinierte Funktion

Alles zur Programmierung im LibreOffice.
Antworten
Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Macroverwaltung für eine nutzerdefinierte Funktion

Beitrag von Wanderer » Do 19. Mär 2015, 09:15

Hallo,

nach dem Upgrade auf LO 4.3.5.2 (von einer 4.1-Version) habe ich die verschiedensten Dataien durchgetestet, die ich so auf meinem Rechner habe, und
ein Problem in der Makroverwaltung entdeckt.

Die angehängte Datei FarbTest3 funktioniert, so wie ich sie hochgeladen habe, problemlos und enthält
eine benutzerdefinierte Funktion (stammt auch aus den Foren). Wobei der eigentliche Makro meiner Ansicht nach wohl nicht relevant ist.

Wenn die Funktion nicht in der Datei gespeichert ist, (wie in der hochgeladenen Version),
sondern nur unter "Meine Macros"->Standard-Module1 zu finden ist kommt es beim Laden zu einem (bzw. 3) Fehlern.
Wenn ich die Fehlermeldungen jeweils mit OK bestätige, wird die Datei geladen, aber der Makro offensichtlich nicht richtig ausgeführt.
Wenn ich jetzt Shift-Ctrl-F9 drücke wird die Datei ohne Fehlermeldung neu berechnet.
In meiner ursprünglichen Version musste ich 9-mal OK bestätigen, d.h. für jeden Aufruf von FARBE einmal. Ich hab dann 6 Felder gelöscht.

Unter meiner vorherigen LO Version 4.1.3.2 konnte ich auch die Version ohne Macro in der Datei (nur unter Meine Macros) problemlos laden.

Meine Fragen wären nun: Ist das ein Bug der beim Laden der Datei auftritt, oder nur irgendein neues Konzept, daß ich nicht verstehe?
Gibt es neben dem Workaround "Makro in der Datei enthalten" eine Anpassung im Macro.

Zum Ausprobieren müsstet Ihr den Makro natürlich einmal selbst in Eure Library verschieben und in Farbe3 löschen,
oder das mit einer eigenen Funktion nachvollziehen. Eine Testdatei kann ich da natürlich nicht beilegen.

MfG, Jörn

PS: Code der Funktion, falls es doch etwas damit zu tun hat:

Code: Alles auswählen

Function FARBE(Zellname As String, R, G, B, Optional Tabellenname As String)
If IsMissing(Tabellenname) then 
oDoc = StarDesktop.ActiveFrame.Controller.Model
Tabellenname = oDoc.CurrentController.getActiveSheet().Name
End if
zelle = ThisComponent.Sheets().getByName(Tabellenname).getCellRangeByName(Zellname) 
If zelle.CellBackColor(R,G,B)=RGB(R,G,B) Then 
      FARBE=1 
   else 
      FARBE=0 
End if 
End Function
Dateianhänge
FarbTest3.ods
Datei mit benutzerdef. Funktion FARBE
(29.54 KiB) 203-mal heruntergeladen
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

mikele
* LO-Experte *
Beiträge: 1932
Registriert: Mo 1. Aug 2011, 20:51

Re: Macroverwaltung für eine nutzerdefinierte Funktion

Beitrag von mikele » Do 19. Mär 2015, 18:10

Hallo,

es liegt am Namen der Funktion. Ich habe sie mal testweise umbenannt und es klappt.
Hintergrund: es gibt neuerdings eine Funktion Farbe(Rot;Grün;Blau;Alpha), zu der ich aber in der Hilfe noch nichts gefunden habe.
Gruß,
mikele

Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: Macroverwaltung für eine nutzerdefinierte Funktion

Beitrag von Wanderer » Mi 25. Mär 2015, 08:50

Hallo Mikele,

Umbenennen hat bei mir keine Änderung gebracht.
Die Fehlermeldung bleibt gleich: Es scheint beim Laden (noch) keine Methode getActiveSheet zu geben, weshalb der Aufruf der Funktion einen Fehler auswirft.
Gibt man den Tabellennamen explizit im optionalen Parameter an wir der Fehler 2 Zeilen weiter ausgeworfen: Sheets() wäre nicht definiert.

Beides ist später kein Problem mehr, weshalb beim Neuberechnen der Tabelle mit Shift-Ctrl-F9 alles funktioniert.
Welche LO-Version hast Du denn ausprobiert?
Nebenbei: Die Namenskollision würde für mich erklären, daß es nie funktioniert, nicht, warum es einen Unterschied macht, wo meine Funktion gespeichert ist.

MfG, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

mikele
* LO-Experte *
Beiträge: 1932
Registriert: Mo 1. Aug 2011, 20:51

Re: Macroverwaltung für eine nutzerdefinierte Funktion

Beitrag von mikele » Fr 27. Mär 2015, 17:12

Hallo,

du hast Recht. Beim Start der Datei scheint Thiscomponent nicht belegt zu sein und damit kommt es zur Fehlermeldung Sheets() nicht definiert.
Die erste Fehlermeldung erscheint bei mir nicht.
Allerdings habe ich das Problem mit der bereits anderweitig definierten Funktion Farbe(), weswegen ich im Tabellenblatt den Fehler #Wert erhalte.
Mit folgendem Makro in Meine Makros funktioniert es fehlerfrei (auch beim ersten Aufruf der Datei):

Code: Alles auswählen

Function FARBE_udf(Zellname As String, R, G, B, Optional Tabellenname As String)
	odoc=StarDesktop.ActiveFrame.Controller.Model
	If IsMissing(Tabellenname) then 
	Tabellenname = oDoc.CurrentController.getActiveSheet().Name
	End if
	zelle = odoc.Sheets().getByName(Tabellenname).getCellRangeByName(Zellname) 
	If zelle.CellBackColor(R,G,B)=RGB(R,G,B) Then 
	      FARBE_udf=1 
	   else 
	      FARBE_udf=0 
	End if 
End Function
Ich habe interessanterweise auch LO 4.3.5.2 im Einsatz (unter Ubuntu 12.04).
Gruß,
mikele


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten