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
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.