2015-07-20 104 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

相关问题