Find方法中的VBA类型不匹配

时间:2017-05-07 17:34:10

标签: excel vba search find

我正在尝试创建一个函数,如果一行中有一个单词“Market”,则会在每一行的第11列中输入“Yes”。但我得到错误不匹配。

Option Explicit

Sub findMarketing()
    Dim r As Range

    For Each rw In Worksheets("Sheet1").Rows
    Set r = rw.Range("A:G")

        If r.Find(What:="market") Then
            rw.Columns(11).Value = "Yes"
        Else
              rw.Columns(11).Value = "No"
        End If
    Next rw
End Sub

1 个答案:

答案 0 :(得分:1)

您可以从评论中得到答案(感谢Ron Rosenfeld),但您也不想通过1,048,576行。使用Intersect函数对任何特定行上的A:G列进行操作,并将行限制为工作表的.UsedRange,这样您只需检查实际包含数据的行。

我已经更改了在A:G列中找到'市场'的方法,因为您没有指定足够的参数。 .Find函数很大程度上依赖于最后使用的内容。如果用户在工作表上使用了“查找”或“替换”并更改了“匹配大小写”,“匹配整个内容”等,那么这就是您要在其下运行的内容。我假设您需要一个不区分大小写的完整单元格值匹配。 [edit]显然需要使用通配符部分匹配。

Option Explicit

Sub findMarketing()
    Dim r As Range, rw As Range

    With Worksheets("Sheet1")
        For Each rw In .UsedRange.Rows
            Set r = Intersect(rw, .Range("A:G"))

            If IsError(Application.Match("*market*", r.Cells, 0)) Then
                .Cells(rw.Row, "K") = "No"
            Else
                .Cells(rw.Row, "K") = "Yes"
            End If
        Next rw
    End With
End Sub