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 [email protected]
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