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