Ermitteln der DocInfos - Objektvariable nicht belegt

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

jfc
**
Beiträge: 31
Registriert: Di, 24.04.2007 11:59
Wohnort: Köln

Ermitteln der DocInfos - Objektvariable nicht belegt

Beitrag von jfc »

Hallo,

ich habe ein Tabellenblatt, in dem ich in einer Zelle das "Datum der letzten Speicherung" ablegen möchte. Leider gibt es in CALC ja keine Feldbefehle, um an die Dokumenteninfos zu kommen. Also habe ich hier im Forum eine FUNCTION gefunden, die mir helfen würde......

Code: Alles auswählen

Function CalcDoc_Modify_Date()
' work with DocInfo
With ThisComponent.DocumentInfo.ModifyDate
   ' set return format
   ' force month and day to two digits
   sTemp = _
      .Year & "-" & _
      Format( .Month, "0#" ) & "-" & _
      Format( .Day, "0#" )
End With
' assign func return value
CalcDoc_Modify_Date = sTemp
End Function
....wenn die denn laufen würde. Zuerst habe ich den Code mit leichten Modifikationen eingesetzt, denn man will ja auch verstehen, was man da tun lässt. Ich bin zwar nicht BASIC-geübt (liegt lange Jahrzehnte zurück, heute bevorzuge ich REXX), aber die Grundfunktionen habe ich verstanden.
Nachdem ich also mit meiner modifizierten Fassung nicht erfolgreich war, habe ich das Original 1:1 eingesetzt. Und siehe da - es lief erst mal wunschgemäß; das Datum wurde korrekt von der Funktion ermittelt und angezeigt. Doch wenn ich nun die ODS-Datei erneut aufrufe, werde ich gefragt, ob die Makros aktiviert werden sollen. Wenn ich das bejahe, wird die IDE geöffnet und die Fehlermeldung "Objektvariable nicht belegt" erscheint. Was kann denn nun kaputt gegangen sein? Und wie kann ich das heilen?

Aufruf der Funktion in der Zelle:

Code: Alles auswählen

=CALCDOC_MODIFY_DATE()
[/b]

P.S. Noch zwei Fragen:
- Wie kann ich die Frage nach der Makroaktivierung unterdrücken (C:\ ist als vertrauenswürdige Quelle unter Optionen eingetragen, Makro liegt aber in einem Unterverzeichnis)
- Verstehe ich richtig, dass der Unterstrich das Fortsetzungszeichen in StarBasic ist?
Zuletzt geändert von jfc am Fr, 25.05.2007 12:04, insgesamt 1-mal geändert.
Grüße aus Zündorf am Rhein
Jürgen
jfc
**
Beiträge: 31
Registriert: Di, 24.04.2007 11:59
Wohnort: Köln

Nachtrag

Beitrag von jfc »

Es wird immer geheimnisvoller:
Heute - einen Tag später - habe ich die CALC-Datei einmal ohne Probleme öffnen können. Allerdings wird das heutige, aktuelle Tagesdatum angezeigt, obwohl ich die Datei definitiv heute noch nicht geändert und gespeichert habe.
Wenn ich dann die Datei ohne Veränderung wieder schließe und anschließend erneut öffne, erscheint wieder die Fehler-Dialogbox "Objektvariable nicht belegt".
So ist das jedenfalls für mich nicht brauchbar.
Grüße aus Zündorf am Rhein
Jürgen
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

a) Dein Makro funktioniert hier (2.2; XPpro) erstmal ohne Probleme: auch nach Beenden des Schnellstarters und erneutem OOo-Start

b) auch hier ist mein home-Verzeichnis u:\ eingetragen, die Makro-Warnmeldung kommt aber trotzdem

c) ja, Unterstrich (ohne weitere Zeichen dahinter! auch keine blanks oder Tabs) gilt als Fortsetzungszeichen. In der Folgezeile können Tabs und Leerstellen vor der nächsten Anweisung stehen.


Frage: WO ist die Funktion gespeichert: in der Standard-Bibliothek von OOo, am Dokument (dann ist beim Öffnen das Objekt ThisComponent vielleicht noch nicht initialisiert...? Toxitom hatte die Tage ein Posting darüber...)


REXX hat mir auch immer sehr zugesagt: Unter VM, MVS, DOS und OS/2. Bei Linux nehme ich dann doch shell und Konsorten :-)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
jfc
**
Beiträge: 31
Registriert: Di, 24.04.2007 11:59
Wohnort: Köln

Beitrag von jfc »

komma4 hat geschrieben:Frage: WO ist die Funktion gespeichert......
Laut "Extras => Makros => Makros verwalten => OpenOffice.org Basic Makros" ist es unter
Meine Makros ----> Standard ------> im Modul "CalcDoc_Modify_Date"
gespeichert. In der Hilfe habe ich irgendwo gelsen, dass diese Module/Funktionen dann für alle OOo-Dokumenten verfügbar sind. Und das ist ja meine Absicht.
Noch als Zusatzinformation:
Neben der Dialogmeldung "Basic-Laufzeitfehler. Objektvariable nicht belegt" wird ja auch das IDE-Fenster aufgemacht. Dort ist der Basic-Text zu sehen. Ein roter Pfeil weist auf die Zeile, die die Variablenzuweisung

Code: Alles auswählen

   sTemp$ = _
enthält. Es ist jetzt abweichend vom Original eine explizite String-Variable, weil ich in meiner Verzweiflung am Code-Anfang ein

Code: Alles auswählen

DIM sTemp$
eingefügt habe.
Die Zelle im Tabellenblatt ist übrigens nach dem Fehler ohne Anzeige (also leer), enthält aber natürlich noch den Funktionsaufruf.
Grüße aus Zündorf am Rhein
Jürgen
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

Die Meldung "Objektvariable leer" bezieht sich nicht auf die Empfangs-Variable, sondern kommt wohl daher, dass ThisComponent.DocumentInfo nicht besetzt ist.

Der Speicherort des Moduls ist OK.

Nun kommt für mich als Fehlerursache die verwendete OOo-Version in den Sinn...welche nutzt Du?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
jfc
**
Beiträge: 31
Registriert: Di, 24.04.2007 11:59
Wohnort: Köln

Beitrag von jfc »

Ich benutze Version 2.0.3 unter WindowsXP.

Ich suche jetzt auch mal nach dem erwähnten Posting von Toxitom - wenn ich mich da mal nicht vergifte.
Grüße aus Zündorf am Rhein
Jürgen
jfc
**
Beiträge: 31
Registriert: Di, 24.04.2007 11:59
Wohnort: Köln

Beitrag von jfc »

Ein passendes "toxisches" Posting habe ich nicht gefunden. Habe aber prophylaktisch mal OOo 2.2 installiert. Leider hat sich am Fehlverhalten nichts geändert.
Grüße aus Zündorf am Rhein
Jürgen
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

Dieses Posting meinte ich.... hilft aber auch nicht....
und: mmmh, warum funktioniert es (hier)?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Beitrag von turtle47 »

Hallo Zusammen,
Wenn ich das bejahe, wird die IDE geöffnet und die Fehlermeldung "Objektvariable nicht belegt" erscheint.
kann das Verhalten nur bestätigen.
Bei mir funktioniert es auch nicht.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
jfc
**
Beiträge: 31
Registriert: Di, 24.04.2007 11:59
Wohnort: Köln

Beitrag von jfc »

Hallo Winfried und Jürgen,

jetzt gebe ich nochmal meinen letzten "Senf" dazu und dann geht's ab ins Pfingstwochenende:
Nach (oberflächlicher) Lektüre einiger Gesprächsfäden hier im Forum und einiger anderer Quellen tippe ich mal auf fehlende Definitionen (oder wie immer man das nennen mag), die es verhindern, dass die Dokumenteninfos als Objekte verfügbar sind. Es sieht so aus, als wenn ich den Kauf und das Studium eines einschlägigen Buches für StarBasic nicht vermeiden kann. Aber vielleicht schaut ja doch noch ein Sachkundiger hier vorbei und gibt den entscheidenden Tipp.

Erst mal jedenfalls schöne Pfingsttage für alle.
Grüße aus Zündorf am Rhein
Jürgen
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

sondern kommt wohl daher, dass ThisComponent.DocumentInfo nicht besetzt ist
ja, so ist wohl die Lage.

Da die Funktion ohnehin nicht so beschaffen ist das sie während der Zeit wo das Dokument geöffnet ist, den Zellinhalt aktualisiert, würde ich einfach statt der Funktion ein Autostartmakro ausführen was den Wert statisch in eine Zelle schreibt. Da ein mit dem Öffnen-Ereignis der Datei verknüpftes Makro später startet als die Berechnung der Zellwerte sollte das gehen.



Gruß
Stephan
Antworten