ich habe leider noch nie mit Instr gearbeitet, soweit gelesen, sollte eigentlich so gehen:
Dim Art As String
Art = Cells(zeile, 7)
Select Case Art
Case Is = InStr(1, Art, „AFPB“, 1): wert = „AFPB“
Case Is = InStr(1, Art, „AFAB“, 1): wert = „AFAB“
usw.
Die erste 1 soll doch sagen, ab welchen Zeichen in einer Zelle ich starten soll. Die zweite 1 soll definieren, das ich textlich und nicht binär suchen soll.
In den Zellen ist meist ein längerer Text als Beschreibung enthalten, in den immer mal diese Zeichenfolgen aber vorkommen.
Hab mir das ganze mit dem Debugger mal angeschaut. Leider erkennt er die Zeichen (wenn enthalten) nicht, sondern die ganze SelectCase Geschichte durch und findet nichts.
„Select case Art“ würde nur funktionieren, wenn du den ganzen Inhalt der Variable „Art“ mit irgendwas vergleichen tätest.
Bei dir ist aber die ganze Bedingung im „case is“, dadurch ist die Variable oben nicht nur überflüssig, sondern sogar so störend, dass es gar nicht funktioniert. Da „select case“ aber unbedingt noch etwas haben will, nimmt man einfach den Wert „true“, der eigentlich in dem Fall nichts bewirkt, außer die Syntaxprüfung zu befriedigen.
Schöne Grüße
Roland
ich habe leider noch nie mit Instr gearbeitet, soweit gelesen,
sollte eigentlich so gehen:
Dim Art As String
Art = Cells(zeile, 7)
Select Case Art
Case Is = InStr(1, Art, „AFPB“, 1): wert = „AFPB“
Case Is = InStr(1, Art, „AFAB“, 1): wert = „AFAB“
usw.
ich benutze zwar auch gerne Select Case wenn sich If vermeiden lässt, aber ich glaube in deinem Fall wäre eine Lösung mit if besser:
Sub durchsuchen()
Dim Art As String
Art = Cells(zeile, 7)
If InStr(1, Art, "AFPB", 1) 0 Then
wert = "AFPB"
ElseIf InStr(1, Art, "AFAB", 1) 0 Then
wert = "AFAB"
' ElseIf ...
'
'
End If
End Sub
hier noch eine Variante, die fast gleichlang bleibt im Code wenn du ansonsten sehr viele Case bzw. ElseIF Zeilen hättest:
Sub Test()
Dim Art As String, Such() As Variant, S As Integer, Wert As String
Such = Array("AFPB", "AFAB", "AFCB")
Wert = "nicht gefunden"
Art = Cells(6, 7).Value
For S = 0 To UBound(Such)
If InStr(1, Art, Such(S), 1) Then
Wert = Such(S)
Exit For
End If
Next S
MsgBox Wert
End Sub
ein Array ist eine sehr gute Idee, das werde ich mir auf jeden Fall nochmal angucken, wenn ich mehr Zeit hab, das der Code langfristig mit Arrays arbeitet.
Arrays sind mir leider bis auf die Theorie noch ein wenig unbekannt
Bei Select Case hast du einen feststehenden Ausdruck, den du dann auf verschiedene Bedingungen prüfst.
In deinem Fall hast du aber keinen feststehenden Ausdruck. Dein Asudruck ist irgendwo in deinem String. Die Position musst du ja erst finden.
Etwas anderes wäre es, wenn dein Ausdruck immer an der selben Stelle im String wäre (z.B. ab Pos. 5) und immer gleich lang wäre (z.B. 4 Zeichen).
Dann könntest du so etwas machen
Select Case Mid(string, 5, 4)
Case "ABCD"
' hier soll was passieren, wenn ABCD ab Pos. 5 im String steht
Case "EFGH"
' hier passiert etwas für EFGH ab Pos. 5
End Select