Forum: PC-Programmierung "Laufzeitfehler '424' Objekt erforderlich" in VB6


von Antonio C. (antonio-c)


Lesenswert?

Hallo Zusammen

Ich erhalte oben erwähnte Fehlermeldung wenn ich ein File mit Button 
Open importieren oder mit Save exportieren will.
VB6 läuft auf x32 XP und SP6 for VB6 ist installiert...

Hier der Code-Abschnitt:
1
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
2
    Dim sFile As String
3
    Dim ProgMemAddrH As Long
4
    Dim command(5) As Byte
5
    Dim writeFail As Boolean
6
7
    Select Case Button.Key
8
        Case "Open"
9
            
10
            With CommonDialog1
11
                .DialogTitle = "Open HEX File"
12
                .CancelError = False
13
                .Flags = cdlOFNHideReadOnly
14
                .Filter = "INHEX32 Files (*.HEX)|*.HEX|All Files (*.*)|*.*"
15
                .ShowOpen
16
                If Len(.FileName) = 0 Then
17
                    Exit Sub
18
                End If
19
            
20
                PicBootS.InFileName = .FileName
21
                .FileName = ""
22
            End With
23
24
25
            RetStat = ImportP24HEXFile(PicBootS.InFileName)
26
27
28
            If RetStat = -2 Then
29
                StatusBar1.Panels(PANEL_STATUS).Text = STATUS_HEX_FORMAT
30
            Else
31
                If RetStat > 0 Then
32
                    StatusBar1.Panels(PANEL_STATUS).Text = STATUS_HEX_IMPORTED
33
                Else
34
                    StatusBar1.Panels(PANEL_STATUS).Text = STATUS_INVALID_HEX
35
                End If
36
            End If
37
            
38
        Case "Save"
39
            With CommonDialog1
40
                .DialogTitle = "Save HEX File"
41
                .CancelError = False
42
                .Flags = cdlOFNHideReadOnly
43
                .Filter = "INHEX32 Files (*.HEX)|*.HEX|All Files (*.*)|*.*"
44
                .ShowSave
45
                If Len(.FileName) = 0 Then
46
                    Exit Sub
47
                End If
48
                PicBootS.OutFileName = .FileName
49
                .FileName = ""
50
            End With
51
52
53
            ExportP24HEXFile PicBootS.OutFileName
54
55
56
            StatusBar1.Panels(PANEL_STATUS).Text = STATUS_HEX_EXPORTED


Kann mir hier jemand helfen?



Danke und Gruss

von Peter II (Gast)


Lesenswert?

in welcher zeile kommt denn der fehler? Einfach mal mit dem Debugger 
durchgehen.

von Antonio C. (antonio-c)


Lesenswert?

nach der Zeile 10 kommt der Fehler...
1
.DialogTitle = "Open HEX File"

von Peter II (Gast)


Lesenswert?

da wird wohl CommonDialog1 nicht initalisiert sein.

von Antonio C. (antonio-c)


Lesenswert?

wo kann ich denn die Initialisierung tun?

von Peter II (Gast)


Lesenswert?

keine ahnung wo kommt den CommonDialog1 überhaupt her?

Wenn es dein Programm ist, musst du doch wissen was du machst.

von Antonio C. (antonio-c)


Lesenswert?

Na ja, fast mein Programm... ;o)

CommonDialog ist eine Klasse in VB und deren Members sind:

.DialogTitle
.CancelError
.Flags
.Filter
.ShowOpen
.FileName
usw.

wieso die Klasse CommonDalog1 im source heisst, weiss ich auch nicht.
In der Klassenbeschreibung steht eben nur CommonDialog. Habe es auch 
ohne die "1" zuletzt versucht.

Ich habe die "Option Explicit" eingefügt und definiere alle Variablen 
eben explicit, mal schauen was raus kommt...

um weitere Hilfe bin ich dankbar...

von Antonio C. (antonio-c)


Lesenswert?

Bei erneutem kompilieren mit "Option explicit" kommt ein "Compile error: 
Variable not defined".
Hier als Variable ist CommonDialog gemeint, obwohl ja diese eine Klasse 
ist...
Kann sein, dass einige Klassen nicht erkannt werden?

von Peter II (Gast)


Lesenswert?

Antonio C. schrieb:
> wieso die Klasse CommonDalog1 im source heisst, weiss ich auch nicht.
> In der Klassenbeschreibung steht eben nur CommonDialog. Habe es auch
> ohne die "1" zuletzt versucht.

du solltst erstmal Programmieren lernen!

Die Klasse hilft dir überhaupt nichts, du brauch ein Objekt der Klasse 
und diese hat immer irgendeinen namen. Aber irgendwo muss du es halt 
erzeugen, und das sieht man leider nicht wo du das machst.

von Antonio C. (antonio-c)


Lesenswert?

ich hab nicht so grosse VB6 Erfahrung.
Wo kann ich ein Objekt erzeugen?
Kannst du mal ein bsp in einigen Zeilen auflisten, wie ein Objekt in VB6 
erzeugt wird?

von Antonio C. (antonio-c)


Lesenswert?

Jetzt habe ich folgenden Code geschrieben und ein Objekt CommonDialog1 
der Klasse CommonDialog definiert:
1
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
2
    Dim sFile As String
3
    Dim ProgMemAddrH As Long
4
    Dim command(5) As Byte
5
    Dim writeFail As Boolean
6
    Dim CommonDialog1 As CommonDialog
7
    Dim RetStat As String
8
    Dim test As String
9
    Dim MyButtons As String
10
11
    Select Case Button.Key
12
        Case "Open"
13
            
14
            
15
            
16
            'With CommonDialog1
17
                CommonDialog1.DialogTitle = "Open HEX File"
18
                CommonDialog1.CancelError = False
19
                CommonDialog1.Flags = cdlOFNHideReadOnly
20
                CommonDialog1.Filter = "INHEX32 Files (*.HEX)|*.HEX|All Files (*.*)|*.*"
21
                CommonDialog1.ShowOpen
22
                If Len(CommonDialog1.FileName) = 0 Then
23
                    Exit Sub
24
                End If
25
            
26
                PicBootS.InFileName = CommonDialog1.FileName
27
                CommonDialog1.FileName = ""
28
            'End With
29
30
31
            RetStat = ImportP24HEXFile(PicBootS.InFileName)
32
33
34
            If RetStat = -2 Then
35
                StatusBar1.Panels(PANEL_STATUS).Text = STATUS_HEX_FORMAT
36
            Else
37
                If RetStat > 0 Then
38
                    StatusBar1.Panels(PANEL_STATUS).Text = STATUS_HEX_IMPORTED
39
                Else
40
                    StatusBar1.Panels(PANEL_STATUS).Text = STATUS_INVALID_HEX
41
                End If
42
            End If


Die "With" Sintax Syntax habe ich mal ausskommentiert.
Nun erhalte ich aber "Laufzeitfehler 91: Objektvariable oder 
With-Blockvariable nicht festgelegt" wenn ich auf Open Button drücke...
Die gleiche Fehlermeldung erhalte ich, wenn der With-Block drin ist...

Eben wie gesagt, ich bin ziemlich ein Anfgänger in VB, also sind 
konstruktive Bemerkungen gewünscht...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dann sieh halt in die Dokumentation, was die zum Gebrauch von Objekten 
des Typs "CommonDialog" erzählt.

Ansonsten gibt es hier auch noch ein paar Hinweise:

http://www.vbarchiv.net/faq/kat_4.html

von Delphi Liebhaber (Gast)


Lesenswert?

Keine Ahnung von VB aber ohne vorab ein Objekt zu deklarieren wird das 
wohl nix.

Schau mal hier http://www.youtube.com/watch?v=b6BtKWYR87w

Und lass das schitt  With CommonDialog1 weg.

Mach das ganze nur unleserliche:

von Antonio C. (antonio-c)


Lesenswert?

Vielen Dank Leute, jetzt hat's funktioniert, der Link von Rufus war 
hilfreich...

Geht eben nichts über ein Objekt deklarieren...

so ist's richtig:
1
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
2
    Dim sFile As String
3
    Dim ProgMemAddrH As Long
4
    Dim command(5) As Byte
5
    Dim writeFail As Boolean
6
    Dim RetStat As String
7
    Dim test As String
8
    Dim MyButtons As String
9
    Dim Dialog As Object
10
    Set Dialog = CreateObject("MSComDlg.CommonDialog")
11
12
    Select Case Button.Key
13
        Case "Open"
14
            
15
            With Dialog
16
                .DialogTitle = "Open HEX File"
17
                .CancelError = False
18
                .Flags = cdlOFNHideReadOnly
19
                .Filter = "INHEX32 Files (*.HEX)|*.HEX|All Files (*.*)|*.*"
20
                .ShowOpen
21
                If Len(.FileName) = 0 Then
22
                    Exit Sub
23
                End If
24
            
25
                PicBootS.InFileName = .FileName
26
                .FileName = ""
27
            End With
28
29
30
            RetStat = ImportP24HEXFile(PicBootS.InFileName)
31
32
33
            If RetStat = -2 Then
34
                StatusBar1.Panels(PANEL_STATUS).Text = STATUS_HEX_FORMAT
35
            Else
36
                If RetStat > 0 Then
37
                    StatusBar1.Panels(PANEL_STATUS).Text = STATUS_HEX_IMPORTED
38
                Else
39
                    StatusBar1.Panels(PANEL_STATUS).Text = STATUS_INVALID_HEX
40
                End If
41
            End If
42
            
43
        Case "Save"
44
            With Dialog
45
                .DialogTitle = "Save HEX File"
46
                .CancelError = False
47
                .Flags = cdlOFNHideReadOnly
48
                .Filter = "INHEX32 Files (*.HEX)|*.HEX|All Files (*.*)|*.*"
49
                .ShowSave
50
                If Len(.FileName) = 0 Then
51
                    Exit Sub
52
                End If
53
                PicBootS.OutFileName = .FileName
54
                .FileName = ""
55
            End With

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.