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
    ich vermute du musst deine Bedingung so schreiben:

    VB.NET-Quellcode

    1. If AusWA22 = optGeh1 Or AusWA22 = optGeh2 Then
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen
    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.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

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