🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst] Objektvariable nicht belegt

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

[gelöst] Objektvariable nicht belegt

Beitrag von Acco » Fr 31. Jan 2014, 16:49

Liebes Forum, liebe Helfer,

ich bitte um Hilfe bei folgender Schwierigkeit:
Untenstehendes Makro funktioniert unter Opensuse 12.3 und LibreOffice 3.5 wunderbar, unter LibreOffice 4.1.4.2 nicht mehr.
(Die Datenbank ist jeweils eingebettet.)

In der vorletzten Zeile kommt die Meldung:

"Basic Laufzeitfehler
Objektvariable nicht belegt".

Code: Alles auswählen

' aktuelles Datum in Formularfeld eintragen

Sub aktDat
    DIM oDocView as Object
    DIM oDoc as Object 
    DIM oForm as Object
    DIM oSubForm as Object
    DIM oFeld as Object
    DIM sDatumHeute as String
    
    oDoc = ThisComponent
    oDocView = oDoc.getCurrentController()
    oForm = oDoc.drawpage.forms(0)
    oFeld = oForm.getByName("DatHeute")
 
    oSubForm = oForm.getByName("SubForm_GebDat")
    sDatumHeute = Date()
   
    oDocView.getControl(oFeld).text = cDate(sDatumHeute)
 
    oDocView.getControl(oFeld).date = CDateToISO(Date)
    ofeld.commit()
…... (das Makro geht noch weiter)

Die Variable „oFeld“ füllt im Formular ein Datumsfeld („DatHeute“, Format „Standard lang“) das mit keiner Tabelle/Abfrage verbunden ist.

Funktioniert in LO 4.1.4.2 CDateToISO(Date) nicht mehr? Wie kann ich es ersetzen?

Für jegliche Hilfe vielen Dank.

acco
Zuletzt geändert von Acco am Sa 1. Feb 2014, 17:47, insgesamt 1-mal geändert.
openSUSE Tumbleweed - LibreOffice 24.8.2.1

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Objektvariable nicht belegt

Beitrag von F3K Total » Fr 31. Jan 2014, 17:16

Moin,
Acco hat geschrieben:Funktioniert in LO 4.1.4.2 CDateToISO(Date) nicht mehr? Wie kann ich es ersetzen?
Nicht ersetzen, lass die Zeile schlicht weg, dann läuft es.

Code: Alles auswählen

Sub aktDat
    DIM oDocView as Object
    DIM oDoc as Object
    DIM oForm as Object
    DIM oSubForm as Object
    DIM oFeld as Object
    DIM sDatumHeute as String
   
    oDoc = ThisComponent
    oDocView = oDoc.getCurrentController()
    oForm = oDoc.drawpage.forms(0)
    oFeld = oForm.getByName("DatHeute")

    oSubForm = oForm.getByName("SubForm_GebDat")
    sDatumHeute = Date()
   
    oDocView.getControl(oFeld).text = cDate(sDatumHeute)

    'oDocView.getControl(oFeld).date = CDateToISO(Date)
    ofeld.commit()
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

Re: Objektvariable nicht belegt

Beitrag von Acco » Sa 1. Feb 2014, 12:54

Danke F3K Total für die schnelle und hilfreiche Antwort.

Du hast recht, das auskommentieren der Zeile führt zur Anzeige des Datums.

Da im weiteren Verlauf des Makros "Tag" und "Monat" aus CDateToISO extrahiert werden, muß ich die entsprechenden Befehle ändern. Das ist kein Problem, ich wollte das mit dem Ersatz von CDateToISO vermeiden. Zumal ich noch nicht weiß, ob ich künftig CDateToISO vergessen kann und ich mir die entsprechende Zeichenkette selbst zusammensetzen muß, oder ob es dazu jetzt (ab Libo 4.1.4) eine neue oder andere Funktion gibt. Dazu habe ich noch keine Info gefunden.

Kannst Du, oder jemand anders, mir da auf die Sprünge helfen?

Besten Dank nochmal, Gruß

acco
openSUSE Tumbleweed - LibreOffice 24.8.2.1

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Objektvariable nicht belegt

Beitrag von F3K Total » Sa 1. Feb 2014, 14:40

Hi,
das Problem ist nicht das

Code: Alles auswählen

CDateToISO(Date)
sondern das

Code: Alles auswählen

oDocView.getControl(oFeld).date
Das Datumsfeld erwartet für seine Eigenschaft .Date , ich meine seit Version 4, ein Struct vom Typ com.sun.star.util.Date

Code: Alles auswählen

CDateToISO(Date)
liefert aber einen String, heute z.B. "20140201", und den kann das "neue" Datumsfeld nicht lesen.
Wenn Du also folgendes nimmst:

Code: Alles auswählen

    Sub aktDat
        DIM oDocView as Object
        DIM oDoc as Object
        DIM oForm as Object
        DIM oSubForm as Object
        DIM oFeld as Object
        DIM sDatumHeute as String
       
        oDoc = ThisComponent
        oDocView = oDoc.getCurrentController()
        oForm = oDoc.drawpage.forms(0)
        oFeld = oForm.getByName("DatHeute")

        oSubForm = oForm.getByName("SubForm_GebDat")
        sDatumHeute = Date()
       
        'oDocView.getControl(oFeld).text = cDate(sDatumHeute)
        dim odate as new com.sun.star.util.Date
        odate.Day = Day(Date)
        odate.Month = Month(Date)   
        odate.Year = Year(Date)
        oDocView.getControl(oFeld).date = odate
        ofeld.commit()
Läuft es auch.
HTH R
Windows 11: AOO, LO Linux Mint: AOO, LO

Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

Re: Objektvariable nicht belegt

Beitrag von Acco » Sa 1. Feb 2014, 17:48

Klasse F3K Total,

die Lösung - und auch die Erklärungen von Dir - haben meine "Probleme" pulverisiert und aufgelöst. Alles funktioniert und gelernt habe ich auch was.
Von Herzen Dank dafür.

acco
openSUSE Tumbleweed - LibreOffice 24.8.2.1


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten