Seite 1 von 2
[gelöst]Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 08:49
von J. Kleis
Hallo,
ein von mir lange genutztes Makro gibt auf einmal den folgenden Fehler aus:
BASIC-Laufzeitfehler.
Objektvariable nicht belegt.
Der Fehler taucht nicht nur bei diesem Kontrollfeld auf, sondern auch bei anderen (Datum und auch Textfelder).
Der entscheidende Code lautet
Code: Alles auswählen
MyCtrl2=MyDlg.getControl("Startzeit")
MyCtrl2.Time=startzeit
Zeile 1 funktioniert noch, Zeile 2 gibt die entsprechende Fehlermeldung. Mit einem Haltepunkt vor der fehlerhaften Zeile kann ich auf das Objekt zugreifen und auch auf die Eigenschaft Time.... Gibt es eine Änderung im Umgang mit Kontrollfeldern?
Vielen Dank für einen Hinweis
Jens
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 09:06
von Karolus
Hallo
"Objektvariable nicht belegt" bezieht sich dann wohl auf startzeit
Karolus
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 10:40
von J. Kleis
Ja schon, aber das Kontrollfeld ist belegt und das Makro einige Jahre lief. Ich erweitere mal die Einsicht:
Code: Alles auswählen
MyCtrl=MyDlg.getControl("Startzeit")
Dim ErgZeit as String
ErgZeit=Hour(TimeValue(Time))
Stunden=Hour(TimeValue(Time))
if Stunden < 10 then
ErgZeit = "0" & ErgZeit
End if
Minuten= Minute(TimeValue(Time))
Min= Minute(TimeValue(Time))
if Min < 10 then
Minuten= "0" & Minuten
End if
ErgZeit=ErgZeit & Minuten & "0000"
dim iZeit as long
MyCtrl.time=ErgZeit
MyCtrl=MyDlg.getControl("DatumStart")
MyCtrl.Date=CDateToIso(DateValue(Now))
MyCtrl=MyDlg.getControl("DatumEnde")
MyCtrl.Date=CDateToIso(DateValue(Now))
End Sub
Der Zugriff auf das Kontrollfeld in einer Pause ist möglich. Aber es gelingt mir noch nicht einmal das Auslesen.
Wenn ich
eingebe bekomme ich
BASIC-Laufzeitfehler.
Falscher Wert für Eigenschaft.
. Wenn ich es als Object versuche, bekomme ich zwar Zugriff, aber wenn ich versuche zu schreiben
gibt es wieder nur einen Fehler
BASIC-Laufzeitfehler.
Objektvariable nicht belegt.
Mir fällt da nichts zu ein. Ich werde jetzt mal einen neuen Dialog erstellen und versuchen, ob ich darauf Zugriff habe...
Trotzdem Danke!
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 11:04
von J. Kleis
So jetzt habe ich mal einen neuen TestDialog erstellt und neue Versuche gestartet. Gleiche Ergebnisse.
Code: Alles auswählen
Sub CallDialogTest
DialogLibraries.LoadLibrary( "Standard" )
MyDlg = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )
Print MyDlg.getControl("TimeField1").Time.Minutes
MyDlg.getControl("TimeField1").Time.Minutes = "12"
Print MyDlg.getControl("TimeField1").Time.Minutes
MyDlg.getControl("TextField1").text = "Esel"
MyDlg.Execute()
MyDlg.Dispose()
End Sub
Die Anzeige funktioniert aber das Ändern wird ohne Fehlermeldung ignoriert. Die Änderung des Textfeldes ist kein Problem.
Code: Alles auswählen
sZeit = format(MyDlg.getControl("TimeField1").time, "00000000") 'Dieser Code ist aus T. Krumbeins Werk und sollte ja wohl stimmen.
bringt
BASIC-Laufzeitfehler.
Falscher Wert für Eigenschaft.
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 11:21
von balu
Hallo Jens,
wie wärs wenn Du eine Beispieldatei hier anhängst, damit wir nicht so am Diät-Code rumrätseln müssen.
Und ferner erklär uns mal etwas genauer was sich bei dir geändert hat, das es zu dem nicht mehr funktionierenden Code kam. Also Betriebssystem, welches Office vorher und jetzt aber mit der genauen Versionsnummer.
Gruß
balu
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 11:29
von J. Kleis
Sorry, hat sich überschnitten. Habe den vorigen Post nochmal geändert, so dass es einfach sein sollte, das Problem nachzuvollziehen. Also geändert hat sich ein Update auf LO 4.1.2.3
Build ID: 410m0(Build:3). An meinem Rechner liegt es eher nicht, da ein Kollege den Fehler bei sich bemerkt hat und ich ihn bei mir sofort nachvollziehen konnte. Fehler tritt bei Win 8.1 (Kollege) und unter Ubuntu 13.10 auf.
Ziel ist es, das Kontrollfeld mit einer Zeit zu belegen, bevor der Dialog angezeigt wird.
Hoffe es wird klarer...
Danke
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 12:52
von Karolus
Hallo
Ich hab jetzt auch nochmal im ollen Krumbein ( sorry Thomas ) nachgeschaut, und probiert, folgendes trägt die
aktuelle Zeit im Zeitfeld ein:
Code: Alles auswählen
Sub CallDialogTest
DialogLibraries.LoadLibrary( "Standard" )
MyDlg = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )
MyDlg.getControl("TextField1").text = "Esel"
form_zeit = format( time , "hhmmss") & "00" rem <---
MyDlg.getControl("TimeField1").time = form_zeit
MyDlg.Execute()
End Sub
Karolus
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 13:02
von J. Kleis
Vielen Dank für die Hilfe, aber leider bekomme ich noch immer den gleichen Fehler...
Um Versionsprobleme auszuschließen, das Problem taucht auf:
Mac: Version: 4.1.2.3 Build ID: 40b2d7fde7e8d2d7bc5a449dc65df4d08a7dd38
Ubuntu 13.10 Version: 4.1.2.3 Build ID: 410m0(Build:3)
KEin Problem:
Mac: Version 3.4.4 OOO34ml(Build:402)
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 13:37
von Karolus
Hallo
Nun, hier funktionierts, siehe Testdatei
mit einer original Lo4.02 unter Suse
Karolus
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 13:54
von J. Kleis
Leider gibt es bei mir den gleichen Fehler.

- bild1.png (76.25 KiB) 3815 mal betrachtet
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 14:03
von berndz2001
Ich habe die Datei gerade mit LO 4.1.2.3 geöffnet und den Schalter betätigt.
Das Ergebnis:
BASIC-Laufzeitfehler.
Objektvariable nicht belegt.
und diese Stelle wird im Code hervorgehoben: MyDlg.getControl("TimeField1").time = form_zeit
Was mit 4.0.x noch funktioniert, scheint in 4.1.x nicht mehr zu gehen

Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 14:04
von J. Kleis
Nachdem das Problem mit alten Versionen offensichtlich nicht existiert, gehe ich davon aus, dass sich entweder ein Bug eingeschlichen hat oder eine Änderung im Umgang mit Kontrollfeldern Einzug gehalten hat. Kann denn jemand mit LO 4.1 das ganze mal testen. Dann käme man der Ursache etwas näher.
Danke!!!!
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 14:31
von balu
Hallo Jens,
kann denn jemand mit LO 4.1 das ganze mal testen.
Ich hab mal LO 4.1.0 und die Datei von Karolus genommen, und folgendes beobachtet.
- Keine Fehlermeldung
- Kein "richtiger" Zeit eintrag im Dialog, es ist nur 00:00 zu sehen
In LO 3.6.4.3 mit der gleichen Datei funktioniert alles so wie es soll.
Da ich diese LO-Versionen nur als Portable habe, kann ich nicht mehr dazu sagen. Es scheint wohl ein Bug, oder ähnliches, ab der 4.1.x zu sein, oder vielleicht auch schon ab der 4.0.0, aber das kann ich nicht mit Gewissheit sagen.
Gruß
balu
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 15:11
von Karolus
Hallo
Ich hab gerade mal ein Update auf LO4.1.2.3 gemacht, und herausgefunden das ein Zeitfeld nicht mehr mit einem String in diesem sonderbaren Format bestückt wird sondern einem Struct
com.sun.star.util.Time
Daraus folgt:
Code: Alles auswählen
Sub CallDialogTest
DialogLibraries.LoadLibrary( "Standard" )
MyDlg = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )
MyDlg.getControl("TextField1").text = "Esel"
stamp = time 'oder auch Now '
h = hour(stamp)
m = minute(stamp)
s = second(stamp)
t = createUnoStruct("com.sun.star.util.Time")
t.Hours = h
t.Minutes = m
t.Seconds = s
MyDlg.getControl("TimeField1").setTime( t )
MyDlg.Execute()
End Sub
Damit funktioniert der Dialog auch in Version 4.1.2.3
Karolus
Re: Fehler beim Befüllen von Dialog-Kontrollfeldern
Verfasst: Mi, 23.10.2013 16:50
von J. Kleis
Danke, den Rest werde ich wohl schaffen..