Wieso ist 'As String' nötig, 'Variant' langt nicht

Hallo Wissende,

es hat mich echt Stunden gekostet und ich wurde schon fast wahnsinnig.
Überall in Google stiess ich auf den identischen Code, überall schien er zu laufen, nur bei mir, egal VBA, VB5.0 lief er nicht:frowning:

Immer Laufzeitfehler 458,
„Variable verwendet einen in Visual Basic nicht unterstützten Typ der Automatisierung“

Nun wurde mir die Lösung genannt, es lag an „As String“. Da wär ich nie darauf gekommen:frowning:

Kann mir bitte mal das jmd erläutern warum es nicht funktionert wenn ich nur sage Dim Satz bzw. Dim Satz as Variant.
Ich verstehe das nicht.

Was in der VBa und VB Hilfe zu String und Variant steht kenne ich, hilft mir irgendwie nicht.

Ich verstehe ja ein bißchen daß wahrscheinlich
msgbox colC.Count
einen Fehler bringt, wenn ich nur deklarierte
Dim colC
und nicht
Dim colC as New Collection

Aber warum schließt Variant nicht String mit ein? Bei beiden wird von der „Verwaltung“ der Variablenname gespeichert, dann halt 10 bzw. 22 Bytes zur Verwaltung, danach die eigentlich Zeichenfolge.

Dieser Code klappt nicht

 Sub test()
 Dim Dat, Satz, FF
 Dat = "H:\bereich2www.xls"
 FF = FreeFile
 Open Dat For Binary As #FF
 Satz = Space$(LOF(FF))
 Get #FF, , Satz
 Close #FF
 End Sub

Dieser Code klappt :

Sub test()
Dim Dat As String, Satz **As String** , FF As Integer
Dat = "H:\bereich2www.xls"
FF = FreeFile
Open Dat For Binary As #FF
Satz = Space$(LOF(FF))
Get #FF, , Satz
Close #FF
End Sub

Danke ^ Gruß
Reinhard

Hallo Reinhard,

bei mir zeigt der Code das gleiche Verhalten wie bei Dir. Ich werde mal ein bisserl rumspielen damit. Aber nachdem Du in VBA fitter bist als ich werde ich Dir da wahrscheinlich nicht helfen können…

Hast Du die Frage schon bei Winzigweich gepostet? Mich würde die Erklärung auch interessieren.

Viele Grüße
Martin

Greüezi Reinhard

es hat mich echt Stunden gekostet und ich wurde schon fast
wahnsinnig.
Überall in Google stiess ich auf den identischen Code, überall
schien er zu laufen, nur bei mir, egal VBA, VB5.0 lief er
nicht:frowning:

Immer Laufzeitfehler 458,
„Variable verwendet einen in Visual Basic nicht unterstützten
Typ der Automatisierung“

Nun wurde mir die Lösung genannt, es lag an „As String“. Da
wär ich nie darauf gekommen:frowning:

Kann mir bitte mal das jmd erläutern warum es nicht
funktionert wenn ich nur sage Dim Satz bzw. Dim Satz as
Variant.
Ich verstehe das nicht.

Was in der VBa und VB Hilfe zu String und Variant steht kenne
ich, hilft mir irgendwie nicht.

Dann lies die HIlfe zu ‚Get‘ - das ist die Zeile an welcher der Code abfliegt.

Ich habe da in der Excel-Online-Hilfe folgendes gefunden:

Anmerkung Sie können mit der Get-Anweisung ein Variant-Datenfeld vom Datenträger lesen, aber Sie können Get nicht verwenden, um einen skalaren Variant-Wert zu lesen, der ein Datenfeld enthält, oder um Objekte von einem Datenträger zu lesen.

Mit freundlichen Grüssen

Thomas Ramel
[Win XP Pro SP-2 / xl2003 SP-3]

Immer Laufzeitfehler 458,
„Variable verwendet einen in Visual Basic nicht unterstützten
Typ der Automatisierung“

Dann lies die HIlfe zu ‚Get‘ - das ist die Zeile an welcher
der Code abfliegt.
Anmerkung Sie können mit der Get-Anweisung ein
Variant-Datenfeld vom Datenträger lesen, aber Sie können Get
nicht verwenden, um einen skalaren Variant-Wert zu lesen, der
ein Datenfeld enthält, oder um Objekte von einem Datenträger
zu lesen.

Grüezi Thomas,

aha, so ist das. Dann frag ich lieber nicht nach was da was genau bedeutet.

Es holt einen halt immer wieder mal ein in Vba wenn man die Grundlagen übersprungen hat :smile:

Gruß
Reinhard