Seite 1 von 1

[gelöst] Objektvariable nicht belegt

Verfasst: Fr 31. Jan 2014, 16:49
von Acco
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

Re: Objektvariable nicht belegt

Verfasst: Fr 31. Jan 2014, 17:16
von F3K Total
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

Re: Objektvariable nicht belegt

Verfasst: Sa 1. Feb 2014, 12:54
von Acco
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

Re: Objektvariable nicht belegt

Verfasst: Sa 1. Feb 2014, 14:40
von F3K Total
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

Re: Objektvariable nicht belegt

Verfasst: Sa 1. Feb 2014, 17:48
von Acco
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