3

我正在使用下面的代码片段从我的“数据摘要”表中检索一个值,并在“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”而中断:类型不匹配。为什么?

4

1 回答 1

1

正如 Siddharth Rout 所说,这可能与Find. 我意识到您的问题的措辞是问“为什么这不起作用”,但我认为您可能对实现相同功能的一些替代方法感兴趣,以避免不得不解决该问题。

该死...我打算建议使用这样的 Excel 公式的选项=INDEX(Sheet2!$A$2:$C$8, MATCH(Sheet1!A3,Sheet2!$C$2:$C$8,0), 1),但我只是对其进行了测试,显然该MATCH函数存在相同的字符限制问题。

好吧,在这种情况下起作用的另一种选择是通过检查范围中的每个单元格值来自己搜索列。以这种方式比较字符串不受与内置 Excel 函数相同的约束。因为它正在搜索整个列,所以它也会查看该列的标题,与您的原始代码相同,因此请注意这一点。在使用 的值之前,您可以检查 的值foundMatch以查看是否找到匹配项strResult。我在我的示例查找中硬编码了该行的值 2 Worksheets("Data Summary")- 您的代码有一个尚未定义的 Cell.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
于 2013-10-24T22:32:14.690 回答