查找 - 类型不匹配
Lookup - Type mismatch
我无法在 vba 中为我的 lookup
函数找到正确的类型。
我的 Excel 公式如下,效果很好。
=IF(INDIRECT("'Enclosure4-Workflow_Structure'!C"&MATCH('Enclosure2-Accesses'!A8;
'Enclosure4-Workflow_Structure'!A:A; 0))="Create";
IF(LOOKUP(2; 1/('Enclosure5-Workflow_Steps'!A:A=INDIRECT("'Enclosure4-Workflow_Structure'!D"
&MATCH('Enclosure2-Accesses'!A8; 'Enclosure4-Workflow_Structure'!A:A; 0)));
'Enclosure5-Workflow_Steps'!D:D) = "Task"; 'Enclosure2-Accesses'!B8; FALSE); FALSE)
第一个 if 子句对我来说工作正常,但第二个 if 子句包含 lookup
函数。这个查找函数应该会得到 "Task"
,因此我想我应该设置 DIM as String
,但我经常收到 错误消息 :"Type mismatch"。
抛出错误的行应该得到最后一次出现的值。该值应对应于 D 列中的 "Task"。
lOccurence = WorksheetFunction.Lookup(2, 1 / (Enc5.Range("A:A") = Enc4.Cells(MatchCrt, "D").Value), Enc5.Range("D:D"))
我很好奇为什么上面一行会导致错误。在 Excel 中,该行没有问题。 是线路不对还是DIM类型(String)不对?
我的VBA代码是:
Public Sub CopyUserAR2Data()
Dim Enc2 As Worksheet
Dim Enc4 As Worksheet
Dim Enc5 As Worksheet
Dim Enc9 As Worksheet
Dim MatchCrt As Double
Dim lOccurence As String
Set Enc2 = Sheets("Enclosure2-Accesses")
Set Enc4 = Sheets("Enclosure4-Workflow_Structure")
Set Enc5 = Sheets("Enclosure5-Workflow_Steps")
Set Enc9 = Sheets("Enclosure9-Dependency")
MatchCrt = WorksheetFunction.Match(Enc2.Cells(9, "A"), Enc4.Range("A:A"), 0)
lOccurence = WorksheetFunction.Lookup(2, 1 / (Enc5.Range("A:A") = Enc4.Cells(MatchCrt, "D").Value), Enc5.Range("D:D"))
If Enc4.Cells(MatchCrt, "C") = "Create" Then
Enc9.Cells(2, 1).Value = lOccurence
End If
End Sub
您的 string
会因为您从 Lookup
中提取 long
值而导致错误
最好的办法就是打电话
Dim lOccurence As Variant
如果您仍然收到错误,则还有其他原因 - 可能是空 return 值
我采纳了 Rory 在评论部分的建议并循环遍历数组。
If sheet1.Cells(FirstCondition, "C") = "Create" Then
For d = 1 To numberOfRows
If (sheet1.Cells(FirstCondition, "D").Value = sheet2.Cells(d, "A").Value And sheet2.Cells(d, "D").Value = "Task") Then
{"Cell values are entered"}
End If
Next d
End If
现在可以正常工作了。
@Rory,非常感谢您的耐心等待和协助!
我无法在 vba 中为我的 lookup
函数找到正确的类型。
我的 Excel 公式如下,效果很好。
=IF(INDIRECT("'Enclosure4-Workflow_Structure'!C"&MATCH('Enclosure2-Accesses'!A8;
'Enclosure4-Workflow_Structure'!A:A; 0))="Create";
IF(LOOKUP(2; 1/('Enclosure5-Workflow_Steps'!A:A=INDIRECT("'Enclosure4-Workflow_Structure'!D"
&MATCH('Enclosure2-Accesses'!A8; 'Enclosure4-Workflow_Structure'!A:A; 0)));
'Enclosure5-Workflow_Steps'!D:D) = "Task"; 'Enclosure2-Accesses'!B8; FALSE); FALSE)
第一个 if 子句对我来说工作正常,但第二个 if 子句包含 lookup
函数。这个查找函数应该会得到 "Task"
,因此我想我应该设置 DIM as String
,但我经常收到 错误消息 :"Type mismatch"。
抛出错误的行应该得到最后一次出现的值。该值应对应于 D 列中的 "Task"。
lOccurence = WorksheetFunction.Lookup(2, 1 / (Enc5.Range("A:A") = Enc4.Cells(MatchCrt, "D").Value), Enc5.Range("D:D"))
我很好奇为什么上面一行会导致错误。在 Excel 中,该行没有问题。 是线路不对还是DIM类型(String)不对?
我的VBA代码是:
Public Sub CopyUserAR2Data()
Dim Enc2 As Worksheet
Dim Enc4 As Worksheet
Dim Enc5 As Worksheet
Dim Enc9 As Worksheet
Dim MatchCrt As Double
Dim lOccurence As String
Set Enc2 = Sheets("Enclosure2-Accesses")
Set Enc4 = Sheets("Enclosure4-Workflow_Structure")
Set Enc5 = Sheets("Enclosure5-Workflow_Steps")
Set Enc9 = Sheets("Enclosure9-Dependency")
MatchCrt = WorksheetFunction.Match(Enc2.Cells(9, "A"), Enc4.Range("A:A"), 0)
lOccurence = WorksheetFunction.Lookup(2, 1 / (Enc5.Range("A:A") = Enc4.Cells(MatchCrt, "D").Value), Enc5.Range("D:D"))
If Enc4.Cells(MatchCrt, "C") = "Create" Then
Enc9.Cells(2, 1).Value = lOccurence
End If
End Sub
您的 string
会因为您从 Lookup
long
值而导致错误
最好的办法就是打电话
Dim lOccurence As Variant
如果您仍然收到错误,则还有其他原因 - 可能是空 return 值
我采纳了 Rory 在评论部分的建议并循环遍历数组。
If sheet1.Cells(FirstCondition, "C") = "Create" Then
For d = 1 To numberOfRows
If (sheet1.Cells(FirstCondition, "D").Value = sheet2.Cells(d, "A").Value And sheet2.Cells(d, "D").Value = "Task") Then
{"Cell values are entered"}
End If
Next d
End If
现在可以正常工作了。
@Rory,非常感谢您的耐心等待和协助!