【问题标题】:Type Mismatch Error for Sheet2.Range String SearchSheet2.Range 字符串搜索的类型不匹配错误
【发布时间】:2015-07-20 14:40:25
【问题描述】:

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

我的问题是,当我尝试列出要搜索的列表时,我得到一个type mismatch error。因此,我在工作表 2 中要查询的值的“数组”列表标记了一个错误。

表 2 列表:

如果我对搜索字符串进行硬编码,它仍然可以工作。

因此,如何使我的数组列表在我的以下代码中工作,以代替 (InStr(item_sum, "Remedy")) 中的 "Remedy"/"Internet ..etc" 等等?

我的代码中的硬编码字符串如下:

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。

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

【问题讨论】:

    标签: excel search vba


    【解决方案1】:

    想通了!

    我需要做的是在 Sheet2 中获取行数并使用它来更新行 (InStr(UCase(item_group), UCase(Sheet2.Range("A" &amp; 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 = ""
    

    如您所见,突出显示有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 2013-07-26
      相关资源
      最近更新 更多