If abgleich

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von eisenhauer.

    If abgleich

    Hallo Zusammen,


    Leider habe ich grad ein Denkfehler warum funktioniert dieser If abfrage nicht als fehler bekomme ich "Type mismatch" obwohl alles als Variant / String vorliegt

    VB.NET-Quellcode

    1. Dim optGeh1, optGeh2, optGeh3, optMechAnz1, optMechAnz2, AusWA22, AusWA40 As Variant
    2. If AusWA22 = (optGeh1 Or optGeh2) Then
    3. MsgBox ("Kombination A22 und A40 nicht zulässig / Fehler !")
    4. Else
    5. MsgBox ("Kombination A22 und A40 zulässig !")
    6. End If


    diese kombinationen funktionieren

    Visual Basic-Quellcode

    1. AusWA22 = optGeh1


    oder

    Visual Basic-Quellcode

    1. AusWA22 = optGeh2
    Korrekt ist: If AusWA22 = optGeh1 Or AusWA22 = optGeh2
    Die menschliche Logik ist für den Compiler nicht logisch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    eisenhauer schrieb:

    Dim optGeh1, optGeh2, optGeh3, optMechAnz1, optMechAnz2, AusWA22, AusWA40 As Variant
    Auch da ist noch ein Denkfehler drin.
    Der kommt nur nicht zum Tragen, weil du alles als Variant definierst.

    Variant ist aber nicht so ganz sauber, weil du damit die Typsicherheit aushebelst.
    Sauber wäre, alles als String zu definieren.
    Wenn du dann allerdings deine Syntax anwendest
    Dim optGeh1, optGeh2, optGeh3, optMechAnz1, optMechAnz2, AusWA22, AusWA40 As String
    kommt der Denkfehler zum Tragen.
    Alle Variablen ausser AusWA40 sind nämlich jetzt implizit als Variant definiert.
    Im Gegensatz zu VB.Net und VB6 musst du in VBA nämlich alle Variablen explizit definieren.
    Dim optGeh1 As String, optGeh2 As String, optGeh3 As String, optMechAnz1 As String, optMechAnz2 As String, AusWA22 As String, AusWA40 As String

    Ein gerne gemachter Fehler, auf den ich einfach wieder mal hinweisen will.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --