运行时错误'13':使用FIND功能时类型不匹配

时间:2013-09-23 18:09:47

标签: vba

我正在使用以下代码段从“数据摘要”表中检索值,并在“QG摘要”表中找到该数据,如果存在匹配项,则检索存储在“QG摘要”第一列中的数据“由我的aCell变量标识的行的表格。

Dim str1 As String
Dim aCell As Range

str1 = Worksheets("Data Summary").Cells(aCell.Row, 3).Value

If (str1 <> "") Then

    Set aCell = Worksheets("QG Summary").Columns(3).Find(What:=str1 _
            , LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False)

    If Not aCell Is Nothing Then
        str1 = Worksheets("QG Summary").Cells(aCell.Row, 1).Value
    End If

End If

此代码适用于所有情况,除了我的变量str1具有较大值(326个字符)的情况。当我的str1变量遇到一个大值时,此代码会因运行时错误“13”而中断:类型不匹配。为什么呢?

1 个答案:

答案 0 :(得分:1)

正如Siddharth Rout所说,它可能与Find的“什么”参数的字符限制有关。我意识到你的问题的措辞是“为什么这不起作用”,但我认为你可能对实现相同功能的一些替代方法感兴趣,以避免不得不解决这个问题。

Dang ......我打算建议选择使用Excel公式,=INDEX(Sheet2!$A$2:$C$8, MATCH(Sheet1!A3,Sheet2!$C$2:$C$8,0), 1),但我只测试了它,显然MATCH函数遇到了相同的字符限制问题。< / p>

那么,在这种情况下工作的另一个替代方法是通过检查范围中的每个单元格值来自己搜索列。以这种方式比较字符串不受与内置Excel函数相同的约束。因为它正在搜索整个列,所以它也将查看该列的标题,与原始代码相同,因此请注意这一点。在使用foundMatch的值之前,您可以检查strResult的值以查看是否找到了匹配项。我在Worksheets("Data Summary")的示例查找中对该行的值2进行了硬编码 - 您的代码具有aCell.Row,尚未定义,因此我假设它已被您的代码的一部分设置为'在摘录中。

Dim strLookup As String
Dim strResult As String
Dim aCell As Range
Dim foundMatch As Boolean

strLookup = Worksheets("Data Summary").Cells(2, 1).Value

foundMatch = False

If (strLookup <> "") Then
    For Each aCell In Worksheets("QG Summary").Columns(3).Cells
        If aCell.Value = strLookup Then
            strResult = Worksheets("QG Summary").Cells(aCell.Row, 1).Value
            foundMatch = True
            Exit For
        End If
    Next
End If