WENN " UND " und "ODER" - Anweisungen
Mein code ist wie folgt:
If (InStr(1, "ALL", Itype) Or InStr(1, Uvar.Device, Itype) _
And (InStr(1, "ALL", Isec) Or InStr(1, Uvar.Sec, Isec)) _
And (InStr(1, "ALL", Idev) Or InStr(1, Uvar.Model, Idev)) Then Useline = "TRUE"
Erweitern diese ein wenig:
Itype ist eine lange Zeichenfolge, z.B. -
Itype = All, Apple, Pear, Orange
Isec = dog, cat, duck
Idev = tree, flower, plant
Jeder UVar.x ist ein einzelnes Wort, z.B. -
UVar.Device = Apple
UVar.Sec = Cat
UVar.Model = tree
So, wenn Itype enthält den string "All" - und es enthält den Wert von UVar.Gerät
und Isec enthält auch die Zeichenfolge "All", oder es enthält den Wert von UVar.Sec
und IDev enthält auch die Zeichenfolge "All", oder es enthält den Wert von UVar.Modell
dann möchte ich die if statement = true
.
Mein code oben scheint, um true zurückzugeben, was auch immer Werte verwendet werden, solange mindestens ein Wert den Kriterien entspricht.
So, tun die Saiten IType, Idev und Isec enthalten jeweils entweder den Wert "alle" oder einen bestimmten Benutzer angegebenen Wert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun, für eine Sache, dein code kann nicht kompiliert werden - Sie müssen entweder entfernen Sie die öffnende Klammer nach dem IF oder fügen Sie eine schließende Klammer ein.
Was jedoch noch wichtiger ist, Sie haben die Reihenfolge der Instr () - Parameter Durcheinander. Zuerst ist der string zu suchen IN, der zweite Zeichenfolge zu suchen FÜR. Das sollte es lösen.
PS: Während Brettdj Antwort wahr ist, VBA interpretiert die position 0 als falsch und alle anderen als true, also ist das nicht unbedingt das Problem.
(Aktualisiert: Zu beheben, um sowie die Rückgabe eines True-Boolean-variable)
InStr
gibt eine position, nicht True oder False. So könnte man hinzufügen, beide tests zusammen, um test für >0, da dann zumindest einer der beiden gekoppelten Bedingungen erfüllt ist. Dann testen Sie alle 3-Paare, dh