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

Von: , Frage gestellt am Mo, 12. Jan 2009

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:-(

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:-(

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

3 Antworten zu dieser Frage

  1. Antwort von nach 15 Stunden 0 hilfreich
    Re: Wieso ist 'As String' nötig, 'Variant' langt n

    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

  2. Antwort von nach einem Tag 0 hilfreich
    Re: Wieso ist 'As String' nötig, 'Variant' langt n

    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:-(

    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:-(

    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]

    • Antwort von nach 3 Tagen 0 hilfreich
      Re^2: Wieso ist 'As String' nötig, 'Variant' langt

      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 :-)

      Gruß
      Reinhard

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!