Fehler beim Kompilieren: For each-Steuervariable muss bei Datenfeldern vom Typ Variant sein?

  • Allgemein

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Hans1990.

    Fehler beim Kompilieren: For each-Steuervariable muss bei Datenfeldern vom Typ Variant sein?

    Hallo zusammen,

    ich verstehe folgende Fehlermeldung beim komilieren nicht:

    "For each-Steuervariable bei Datenfeldern muss vom Typ Variant sein"



    Mein Code sieht folgendermaßen aus:

    VB.NET-Quellcode

    1. Option Explicit
    2. Sub Test()
    3. Dim arrComBoxes(2) As ComboBox
    4. Set arrComBoxes(0) = Windows.Controls.Add("Forms.Combobox.1")
    5. Set arrComBoxes(1) = Windows.Controls.Add("Forms.Combobox.1")
    6. Dim arrStr(2) As String
    7. arrStr(0) = "Eins"
    8. arrStr(1) = "Zwei"
    9. Dim combox As ComboBox
    10. Dim str As String
    11. For Each combox In arrComBoxes
    12. For Each str In arrStr
    13. 'do something
    14. Next str
    15. Next combox
    16. End Sub


    Klar kann ich die Variable combox und str als Variant deklarieren, dann kann ich aber in der for each-Schleife nicht wirklich damit arbeiten, also z.B. der Combobox Werte hinzufügen...

    Vielleicht kennt einer von euch eine Lösung?



    Viele Grüße

    Hans
    Hallo Alchimist,

    ich bin mir nicht ganz sicher wo ich diese nachschauen kann. Ich verwende VBA aus Excel 2007.

    Mit UBound und LBound könnte ich es hinbekommen. Ich hatte mich nur gefragt, warum dieser Fehler auftritt, weil an anderen Stellen

    funktioniert bei mir die for each-Schleife einwandfrei. Zum Beispiel wenn ich Worksheets durchlaufe...

    Vielleicht muss ich noch eine Bibliothek einbinden?

    Gruß Hans
    Hallo Hans,

    Warum..? weiß nicht. Aber schau dir mal meinen Quelltext an, was ist denn daran nicht so, wie du es wünscht?

    VB.NET-Quellcode

    1. Private Sub CommandButton1_Click()
    2. test_Variant
    3. Test_Cbo
    4. End Sub
    5. Sub Test_Cbo()
    6. Dim arrCbo(0 To 2) As ComboBox
    7. Dim i As Long
    8. For i = LBound(arrCbo) To UBound(arrCbo)
    9. Set arrCbo(i) = Controls.Add("Forms.Combobox.1")
    10. With arrCbo(i)
    11. .Top = (1.1 * i + 0.5) * arrCbo(i).Height
    12. .Left = 0.5 * arrCbo(i).Height
    13. End With
    14. Next i
    15. For i = LBound(arrCbo) To UBound(arrCbo)
    16. arrCbo(i).AddItem "Test_" & i & "_A"
    17. arrCbo(i).AddItem "Test_" & i & "_B"
    18. arrCbo(i).AddItem "Test_" & i & "_C"
    19. arrCbo(i).ListIndex = 0
    20. Next i
    21. End Sub
    22. Sub test_Variant()
    23. Dim arrCbo(0 To 2) As ComboBox
    24. Dim oCbo As Variant
    25. Dim i As Long
    26. For i = LBound(arrCbo) To UBound(arrCbo)
    27. Set arrCbo(i) = Controls.Add("Forms.Combobox.1")
    28. With arrCbo(i)
    29. .Top = (1.1 * i + 0.5) * arrCbo(i).Height
    30. .Left = 0.5 * arrCbo(i).Height + 1.1 * arrCbo(i).Width
    31. End With
    32. Next i
    33. i = 0
    34. For Each oCbo In arrCbo
    35. oCbo.AddItem "Test_" & i & "_A"
    36. oCbo.AddItem "Test_" & i & "_B"
    37. oCbo.AddItem "Test_" & i & "_C"
    38. oCbo.ListIndex = 0
    39. i = i + 1
    40. Next oCbo
    41. End Sub


    Gruß Markus
    Ich habe es nun auch mit LBound und UBound realisiert, wie du meintest. Nur fand ich keine Erklärung für den Fehler...

    Komme von Java bzw. C# und da ist VB teilweise ein wenig komisch. Zum Beispiel, dass man kein String-Array definieren kann, welches man mehreren Comboboxes als Source zuweisen kann...

    Aber mein Problem hat sich ja gelöst. Daher vielen Dank.