2015-07-20 47 views
1

繼我的上一個問題 Search String in Spreadsheet and Highlight,我能夠讓單元格在VBA中爲excel突出顯示。我的VBA代碼搜索工作表以查找特定單詞並突出顯示包含這些單詞的單元格。Sheet2.Range類型不匹配錯誤字符串搜索

我的問題是,當我嘗試做一個列表搜索,我得到一個type mismatch error。所以我在Sheet 2中查詢的「數組」列表中的值標記了一個錯誤。

表2列出:

enter image description here

如果我硬編碼我的搜索字符串它工作雖然。

因此,如何讓我的數組列表在我的下列代碼中取代"Remedy"/"Internet ..etc"(InStr(item_sum, "Remedy"))等等?

我在我的代碼硬編碼字符串如下:

Private Sub CommandButton1_Click() 

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

Do 
DoEvents 

row_num = row_num + 1 
Sheet1.Range("B" & row_num & ":E" & row_num).Interior.Color = xlNone 

    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, "Remedy")) Then 
      Sheet1.Range("B" & row_num).Interior.Color = RGB(255, 255, 0) 
     End If 

     If (InStr(item_sum, "Internet") Or InStr(item_sum, "internet")) Then 
      Sheet1.Range("B" & row_num).Interior.Color = RGB(255, 255, 0) 
     End If 

     If InStr(item_note, "Remedy") Then 
      Sheet1.Range("C" & row_num).Interior.Color = RGB(255, 255, 0) 
     Else 
      Sheet1.Range("C" & row_num).Interior.Color = xlNone 
     End If 

     If InStr(item_group, "Remedy") Then 
      Sheet1.Range("D" & row_num).Interior.Color = RGB(255, 255, 0) 
     End If 

Loop Until item_sum = "" 


End Sub 

正如你可以看到我試過行:Query = Sheet2.Range("A:A")搜查像這樣:If (InStr(item_sum, Query)) Then,但沒有奏效。

UPDATE:

所以我一直在玩動態域名。到目前爲止,我從Sheet2的列表中獲取字符串以顯示在MsgBox中進行調試。但是,當它運行時,它會突出顯示「Remedy」的B2單元,但沒有其他。但我可以告訴我的UCase(Sheet2.Range("A" & Count).Value)顯示列表中的每一個。仍然只有B2細胞的顏色?當我逐行解碼時,它似乎只在Sheet2的列表中註冊最後一個字符串搜索,即「Remedy」,因此只突出顯示B2。

enter image description here

Private Sub CommandButton1_Click() 

row_num = 1 

Dim query_list As Range 
Set query_list = Sheet2.Range("A:A") 

'MsgBox "Number of Rows are " & WorksheetFunction.CountA(query_list) 
list_count = WorksheetFunction.CountA(query_list) 

row_num = row_num + 1 
Sheet1.Range("B" & row_num & ":E" & row_num).Interior.Color = xlNone 
Sheet1.Range("I" & row_num).Value = "" 

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

For Each list In query_list 

Count = Count + 1 
If (Count <= list_count) Then 
     'ALL QUERIES FOR COLUMN B 

     MsgBox UCase(Sheet2.Range("A" & Count).Value) 
     If (InStr(UCase(item_sum), UCase(Sheet2.Range("A" & Count).Value))) Then 
      Sheet1.Range("B" & row_num).Interior.Color = RGB(255, 255, 0) 
      Sheet1.Range("I" & row_num).Value = "Yes" 
     End If 
End If 

Next 

回答

0

想通了!

我需要做的是讓行計數Sheet 2中,並使用符合(InStr(UCase(item_group), UCase(Sheet2.Range("A" & Count).Value)))

Private Sub CommandButton1_Click() 

row_num = 1 

Dim query_list As Range 
Set query_list = Sheet2.Range("A:A") 

Dim total_rows As Integer 
total_rows = WorksheetFunction.CountA(query_list) 
MsgBox total_rows 

'MsgBox "Number of Rows are " & WorksheetFunction.CountA(query_list) 
Dim list_count As Integer 
list_count = WorksheetFunction.CountA(query_list) 

Do 
DoEvents 

      row_num = row_num + 1 
      Sheet1.Range("B" & row_num & ":E" & row_num).Interior.Color = xlNone 
      Sheet1.Range("I" & row_num).Value = "" 

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

      While (Count <= list_count) 
      'MsgBox Count 
      'MsgBox item_sum 
       If (InStr(UCase(item_sum), UCase(Sheet2.Range("A" & Count).Value))) Then 
       'MsgBox Count 
       'MsgBox UCase(Sheet2.Range("A" & Count).Value) 
        Sheet1.Range("B" & row_num).Interior.Color = RGB(255, 255, 0) 
        Sheet1.Range("I" & row_num).Value = "Yes" 

       End If 

       Count = Count + 1 
       'MsgBox Count 

      Wend 

      Count = 1 
      While (Count <= list_count) 
      'MsgBox Count 
      'MsgBox item_sum 
       If (InStr(UCase(item_note), UCase(Sheet2.Range("A" & Count).Value))) Then 
       'MsgBox Count 
       'MsgBox UCase(Sheet2.Range("A" & Count).Value) 
        Sheet1.Range("C" & row_num).Interior.Color = RGB(255, 255, 0) 
        Sheet1.Range("I" & row_num).Value = "Yes" 

       End If 

       Count = Count + 1 
       'MsgBox Count 

      Wend 

      Count = 1 

      While (Count <= list_count) 
      'MsgBox Count 
      'MsgBox item_sum 
       If (InStr(UCase(item_group), UCase(Sheet2.Range("A" & Count).Value))) Then 
       'MsgBox Count 
       'MsgBox UCase(Sheet2.Range("A" & Count).Value) 
        Sheet1.Range("E" & row_num).Interior.Color = RGB(255, 255, 0) 
        Sheet1.Range("I" & row_num).Value = "Yes" 

       End If 

       Count = Count + 1 
       'MsgBox Count 

      Wend 

Loop Until item_sum = "" 

enter image description here

更新字符串值正如你所看到的,突出的作品

相關問題