Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


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+help@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

Context


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.