Hallo Frieder, das mit den Properties ist eine geniale Idee. Das wäre mir nie eingefallen.
Vielen Dank noch mal Helmut Am 10.02.2012 11:40, schrieb Frieder: > Hallo Helmut > > Am 10.02.2012 09:12, schrieb Helmut Leininger: >> Hallo, >> >> Ich versuche im Prinzip folgendes mit einem im Dokument (d.h. nicht >> LibreOffice global) gespeicherten Makro: >> >> Private var1 >> >> sub sub1 >> var1 = "blablabla" >> .... >> end sub >> >> >> sub sub2 >> xxx = var1 >> .... >> end sub >> >> >> >> sub1 wird beim Ereignis "Neues Dokument" aufgerufen und lädt eine >> Variable var1 >> >> sub2 wird später (z.B. nach dem Speichern oder beim Verlassen des >> Dokuments) über ein Ereignis aufgerufen und wertet die zuvor gesetzte >> Variable aus. >> >> Das Problem: >> var1 wird in sub1 richtig geladen. Später beim Aufruf von sub2 ist sie >> aber immer leer. Alle meine Versuche (auch mit Public oder Global) haben >> fehlgeschlagen, auch ein Umgehungsversuch mit einer STATIC variablen in >> einer Hilfs-Subroutine >> > > Das Problem kenne ich. Alle Basic Routinen werden Beendet, > wenn kein Makro mehr läuft. > Dadurch werden auch alle Variablen aus dem Speicher gelöscht. > Das hat den Vorteil, dass kein zusätzlicher Arbeitsspeicher verbraucht > wird. > > Wenn du eine Variable später wieder Brauchst, > so musst du sie irgendwo zwischenspeichern. > entweder, du speicherst sie irgendwo im Dokument > (z.B. in einem Versteckten CalclSheet), oder in einer temporären Datei, > oder aber einfach in den UserDefinedProperties des Dokuments. > > ich habe dir dazu mal zwei nützliche Funktionen geschrieben. > > Zum speichern eines Wertes kannst du die Funktion "set_UDPropertyValue" > verwenden. > Um dann den Wert wieder auszulesen, kannst du > die Funktion "get_UDPropertyValue" verwenden. > > > > Sub main > If set_UDPropertyValue("sString" ,"Hallo")Then > MsgBox get_UDPropertyValue( "sString") > else > MsgBox "Falscher Wert für diese Property" > 'Wird ausgegeben, falls das PropertyValue Schon existiert, > 'und dafor einen anderen Datentyp hatte: > 'Z.B. "double2" War 6,258 (Also ein double wert9 > 'Versucht man ihm nun den Wert "Hallo" (also einen string zuzuweisen), > ' so geht das natürlich nicht. > end if > End sub > > Function set_UDPropertyValue(sProperty AS String , vValue as Variant)As > Boolean > Dim oUDP As Object > Dim i as Integer > dim aProps > Dim bHasProperty as Boolean > oUDP=ThisComponent.DocumentProperties.getUserDefinedProperties > > aProps()=oUDP.getPropertyValues > For i=0 To ubound(aProps()) > If aProps(i).Name= sProperty Then > bHasProperty=True > Exit for > end if > Next > If bHasProperty then > On Error goto error_handler > oUDP.setPropertyValue( sProperty, vValue) > Else > oUDP.addProperty( sProperty ,0, vValue) > End if > set_UDPropertyValue=True > > Exit function > error_handler: > set_UDPropertyValue=False > End Function > > Function get_UDPropertyValue(sProperty AS String) As Variant > Dim oUDP As Object > Dim i as Integer > dim aProps > Dim bHasProperty as Boolean > oUDP=ThisComponent.DocumentProperties.getUserDefinedProperties > aProps()=oUDP.getPropertyValues > For i=0 To ubound(aProps()) > If aProps(i).Name= sProperty Then > bHasProperty=True > Exit for > end if > Next > If bHasProperty then > get_UDPropertyValue=oUDP.getPropertyValue(sProperty) > Else > get_UDPropertyValue="No such Property" > end if > end Function > > > > Gruß Frieder > > > > > > -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert