2015-06-11 48 views
0

我試圖讓輸入框中輸入的搜索字符串與*通配符一起使用,以搜索所選範圍內字符串的實例。使用通配符和解析對象參考的VBA Excel

Sub color() 
Dim myRange As Range, value As String, wild As Icon 

value = InputBox("Search String:") 
If value = vbNullString Then Exit Sub 
Range("A1").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlDown)).Select 
For Each myRange In Selection 
    If myRange.value = "*" & value & "*" Then 
    myRange.Interior.ColorIndex = 3 
    End If 
Next myRange 
End Sub 
+2

嘗試'如果myRange.value LIKE 「*」 和值「* 「然後'。等於是二進制比較。 LIKE被稱爲*模式匹配*。 – Jeeped

回答

3

另一種可能性: 爲什麼要使用通配符?已經有一個VBA函數來測試子字符串。嘗試:

If InStr(myRange.value,value) > 0 Then 
+0

謝謝!完美的作品! – gduhoffmann

+1

爲了讓它不區分大小寫,你可以使用InStr(1,myRange.value,value,vbTextCompare) –

0

而不是通配符:

Sub color() 
    Dim myRange As Range, valuee As String 
    valuee = InputBox("Search String:") 
    If valuee = vbNullString Then Exit Sub 
    Range("A1").Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Range(Selection, Selection.End(xlDown)).Select 

    For Each myRange In Selection 
     If InStr(myRange.value, valuee) > 0 Then 
     myRange.Interior.ColorIndex = 3 
     End If 
    Next myRange 
End Sub 

我們也可以使用.Find方法。

編輯#1:

下面是使用.Find.FindNext版本:

Sub color2() 
    Dim myRange As Range, valuee As String 
    valuee = InputBox("Search String:") 
    If valuee = vbNullString Then Exit Sub 

    Range("A1").Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Range(Selection, Selection.End(xlDown)).Select 

    Set myRange = Selection.Find(what:=valuee, after:=Selection(1)) 
    If myRange Is Nothing Then 
     MsgBox "no value" 
     Exit Sub 
    End If 
    myRange.Interior.ColorIndex = 3 
    st = myRange.Address(0, 0) 

    Do Until myRange Is Nothing 
     Set myRange = Selection.FindNext(after:=myRange) 
     If myRange.Address(0, 0) = st Then Exit Do 
     myRange.Interior.ColorIndex = 3 
    Loop 
End Sub 
+0

你可以給我一個.Find方法的例子嗎? – gduhoffmann

+1

@gduhoffmann查看我的**編輯#1 ** –

+0

感謝您的協助! – gduhoffmann