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

Antwort per Email an