2015-07-20 64 views
0

我在Excel中使用VBA來使用Sheet 2的字符串值列表並查詢Sheet 1的數據以查看Sheet 2的值是否存在。如果它們存在,請突出顯示Sheet1中的單元格。電子表格中的搜索字符串和突出顯示

我在第2頁的清單如下:

列以A

管理服務

高管

防火牆'

發電機

互聯網

IT應用支持

代理

補救

我的VBA是:

Private Sub CommandButton1_Click() 

row_num = 1 

Query = Sheet2.Range("A:A") 

While Trim(ActiveCell.Value) <> "" 

row_num = row_num + 1 
    item_sum = Sheet1.Range("B" & row_num) 
    item_note = Sheet1.Range("C" & row_num) 
    item_group = Sheet1.Range("E" & row_num) 

     If (InStr(item_sum, Query) Or InStr(item_note, Query) Or InStr(item_group, Query)) Then 

      ActiveCell.Interior.Color = RGB(255, 255, 0) 

     End If 

Wend 


End Sub 

現在我沒有錯誤標誌,沒有任何亮點。我試圖使用查詢值爲Sheet 2的列A,但我不知道它是否工作。

enter image description here

更新:

我試圖改變While循環:

Do 
DoEvents 
row_num = row_num + 1 
    item_sum = Sheet1.Range("B" & row_num) 
    item_note = Sheet1.Range("C" & row_num) 
    item_group = Sheet1.Range("E" & row_num) 

     If (InStr(item_sum, Query) Or InStr(item_note, Query) Or InStr(item_group, Query)) Then 

      ActiveCell.Interior.Color = RGB(255, 255, 0) 

     End If 

Loop Until item_sum = "" 

但是我突出了以下活動: enter image description here

+0

當您將需要檢查的值加載到數組中時,它的工作效果可能會更好,然後檢查數組中的匹配項。你是否也聲明瞭你的變量? – Luuklag

+0

不確定你的意思是「加載值」,但我假設你的意思是如果(InStr(item_sum,「Remedy」))Then'。另外,我意識到我的Sheet1名稱是Data和Sheet2名稱是List。所以我嘗試了'item_sum =工作表(「數據」)。範圍(「B」和row_num)'和仍然只有光標停留在光標不會停止基於字符串查詢@Luuklag – narue1992

回答

1

我覺得你的代碼工作得很好。唯一的問題是,你沒有突出顯示被檢查的單元格,但是ActiveCell。所以,你可能需要考慮將其改爲如下所示:

Option Base 0 
Option Explicit 
Option Compare Text 

Public Sub CommandButton1_Click() 
Dim item_sum, item_note, item_group As String 
Dim lngRowNumber As Long 
Dim varFound As Variant 
Dim rngQuery As Range 

Set rngQuery = Sheet2.Range("A:A") 
lngRowNumber = 1 

Do 
    If Trim(item_sum) = vbNullString Then Exit Do 
    ' Go to the next row 
    lngRowNumber = lngRowNumber + 1 
    ' Get the data to look for 
    item_sum = Sheet1.Range("B" & lngRowNumber).Value2 
    item_note = Sheet1.Range("C" & lngRowNumber).Value2 
    item_group = Sheet1.Range("E" & lngRowNumber).Value2 
    ' Check the item_sum 
    Set varFound = rngQuery.Find(item_sum, LookIn:=xlValues, LookAt:=xlPart) 
    If Not varFound Is Nothing Then 
     Sheet1.Range("B" & lngRowNumber).Interior.Color = RGB(255, 255, 0) 
     Set varFound = Nothing 
    End If 
    ' Check the item_note 
    Set varFound = rngQuery.Find(item_note, LookIn:=xlValues, LookAt:=xlPart) 
    If Not varFound Is Nothing Then 
     Sheet1.Range("C" & lngRowNumber).Interior.Color = RGB(255, 255, 0) 
     Set varFound = Nothing 
    End If 
    ' Check the item_group 
    Set varFound = rngQuery.Find(item_group, LookIn:=xlValues, LookAt:=xlPart) 
    If Not varFound Is Nothing Then 
     Sheet1.Range("E" & lngRowNumber).Interior.Color = RGB(255, 255, 0) 
     Set varFound = Nothing 
    End If 
Loop 

End Sub 

很明顯,我也對整體代碼做了一些小的改動。希望他們中的一些人有幫助。

+0

我的工作表名稱其中「數據」Sheet1和「列表」,但是我將它們重新更改爲Sheet1和Sheet2。隨着你的改變,看起來沒有什麼是突出的。然而,我現在得到一個類型不匹配的行'如果(InStr(item_sum,查詢)或InStr(item_note,查詢)或InStr(item_group,查詢))然後' – narue1992

+0

好吧,所以當我刪除'查詢'和硬編碼之一單詞到'InStr(item_sum,「補救措施」))'它的工作。問題是我的sheet2列表會不時增加,所以我不想硬編碼的字符串 – narue1992

+0

我會針對我的問題詢問一個單獨的問題。謝謝! – narue1992

相關問題