Sheet2.Range字符串搜索类型不匹配错误

时间:2015-07-20 14:40:26

标签: excel-vba search vba excel

按照我之前的问题 Search String in Spreadsheet and Highlight,我能够让细胞在VBA中突出显示excel。我的VBA代码搜索工作表以查找特定单词并突出显示包含这些单词的单元格。

我的问题是,当我尝试列出要搜索的列表时,我会得到一个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但它无效。

更新

所以我一直在玩动态名称。到目前为止,我从Sheet2的列表中获取字符串,以显示在MsgBox中进行调试。然而,当它运行时,它将突出显示“补救”的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

1 个答案:

答案 0 :(得分:0)

计算出来!

我需要做的是获取Sheet2中的行数并使用它来更新行(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

如您所见,突出显示作品