2015-06-10 51 views
3

我已經找到了解決方案,但代碼太長。然後我決定搜索一種插入我想要查找的所有單詞的方法,並將其突出顯示爲單個查找方法。我遇到了一些使用陣列的想法,並使用這3個代碼編寫我的代碼(thisthisthis),但我是VBA的新用戶,因此我的最終代碼有問題,它突出顯示了最後一個字符串陣列。我認爲問題是邏輯,但我不知道VBA的基礎知識,所以我不知道如何糾正它。如何在ActiveSheet中查找並突出顯示所有出現的多個字符串?

我的實際代碼:

Sub Sample() 
Dim fnd As String 
Dim MyAr 
Dim i As Long 
Dim rng As Range, FoundCell As Range, LastCell As Range, myRange As Range 

Set myRange = ActiveSheet.UsedRange 
Set LastCell = myRange.Cells(myRange.Cells.Count) 

fnd = "hugo/vw/osnabrück" 

MyAr = Split(fnd, "/") 

    For i = LBound(MyAr) To UBound(MyAr) 

     Set FoundCell = myRange.Find(what:=MyAr(i), after:=LastCell) 

     If Not FoundCell Is Nothing Then 
      FirstFound = FoundCell.Address 
     End If 
Set rng = FoundCell 
      Do Until FoundCell Is Nothing 
       Set FoundCell = myRange.FindNext(after:=FoundCell) 
        Set rng = Union(rng, FoundCell) 
       If FoundCell.Address = FirstFound Then Exit Do 
      Loop 
    Next i 

If Not rng Is Nothing Then 
    rng.EntireRow.Interior.ColorIndex = 3 
End If 
End Sub 

例如與此代碼我可以找到並選中所有的「奧斯納布呂克」,但它並不突出任何雨果或大衆。

回答

3

這是因爲你只在代碼的最後一次做高亮處理,而你陣列中的最後一個選擇恰好是osnabruck。

你需要移動

If Not rng Is Nothing Then 
    rng.EntireRow.Interior.ColorIndex = 3 
End If 

只是

next i 

,以便它會如果陣列中的每個元素做之前。

+1

同意,這將解決問題。值得注意的是:它看起來像OP試圖用'Union'來構建一個'Range'並在最後做一個亮點。如果是這樣,問題是使用'Set rng = FoundCell',它爲每個'i'運行。如果它是'Set rng = Union(rng,FoundCell)',這將起作用。問題在於第一個'Union'會失敗,因爲'rng是Nothing'。這可以通過用'如果rng不是那麼:包rng = FoundCell:Else:... union ...:End If'來解決。 –

相關問題