2017-05-04 2 views
0
Private Sub Workbook_Open() 
Dim WBname As String 
WBname = ThisWorkbook.name 

If Not InStr(WBname, "test") > 0 Then 
MsgBox ("NotOK") 
End If 

End Sub 

EDIT: Für weitere Erläuterungen.InStr für Array von Werten (möglich?)

Ich jetzt testen, ob "Test" im Arbeitsmappen-Namen ist.

Aber ich möchte testen, ob mehr Wörter als nur "Test" im Workbook-Namen sind, ohne den Code tausendmal zu kopieren.

+0

Sie können Range.Find verwenden, um festzustellen, ob sich die Zeichenfolge auf dem Blatt befindet. Oder Sie können Join() verwenden, um das Array zu einer Zeichenfolge zusammenzufassen, von der aus Sie Instr verwenden können. Ich glaube, die Range.Find-Methode wird schneller sein. –

+0

* eine ganze Liste von Zeichenfolgen, die nicht in den Tabellen definiert sind. * - Wollen Sie testen, ob einer oder mehrere isolierte Zeichenfolgenwerte im Arbeitsmappennamen enthalten sind? Und was bedeutet * nicht in den Tabellen * definiert? –

+0

Klärte den Beitrag. Es tut uns leid. – bub

Antwort

5

diese Verwendung, wenn WBname müssen alle Wörter enthalten

Dim WBname As String 
WBname = ThisWorkbook.Name 

Dim arrWords As Variant, aWord As Variant 
arrWords = Array("aa", "bb", "cc") 'input your words list here 

For Each aWord In arrWords 
    If Not InStr(WBname, aWord) > 0 Then 
     MsgBox ("NotOK") 
     Exit For 
    End If 
Next 

verwenden, wenn WBname mindestens ein Wort

Dim WBname As String 
WBname = ThisWorkbook.Name 

Dim arrWords As Variant, aWord As Variant 
arrWords = Array("aa", "bb", "cc") 'input your words list here 

Dim wordFound As Boolean 
wordFound = False 
For Each aWord In arrWords 
    If InStr(WBname, aWord) > 0 Then 
     wordFound = True 
     Exit For 
    End If 
Next 
If Not wordFound Then 
    MsgBox ("NotOK") 
End If 
+0

Perfekt, es funktioniert sehr gut. – bub

0

können Sie verwenden und in der IF:

If Not InStr(WBname, "test") > 0 and not InStr(WBname, "other word") ... 

oder können Sie OR verwenden, auf Ihrem Test abhängig.

+0

Was ist das Problem mit meinem Code? –

+0

Ich denke, es ist nichts falsch. Aber vielleicht hat das OP mehr als 2 oder 3 Wörter zu testen, was diesen Ansatz etwas umständlich macht. Ich denke, das ist es, was die OP mit "* ohne Kopieren-Einfügen des Codes tausendmal *" gemeint hat. Vielleicht wurde es deswegen abgelehnt. Nimm es nicht persönlich. –

+1

Vielen Dank für Ihre Antwort. Nein!! Ich nehme es nicht persönlich !! In meinem Fall dachte ich, dass bubububub das gleiche "wenn ... Ende wenn" nicht mehr kopieren wollte, also war es die schnelle Idee, ich musste Operatoren UND oder ODER verwenden. –

0

Shorter und etwas langsamer Methode mit Excel Formeln enthalten:

containsAny = Evaluate("count(search({""ab"",""cd""},""bcde""))>0") ' True 

Oder mit Ihrem Beispiel:

Private Sub Workbook_Open() 
    If Evaluate("count(search({""test"",""Book1""},""" & Me.Name & """))=0") Then 
     MsgBox "NotOK" 
    End If 
End Sub