【问题标题】:Lookup - Type mismatch查找 - 类型不匹配
【发布时间】:2019-03-05 11:12:57
【问题描述】:

我在 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,但我经常收到错误消息:“类型不匹配”。

抛出错误的行应该得到最后出现的值。此值应对应于 D 列中的“任务”。

lOccurence = WorksheetFunction.Lookup(2, 1 / (Enc5.Range("A:A") = Enc4.Cells(MatchCrt, "D").Value), Enc5.Range("D:D"))

我很好奇为什么上面的行会导致错误。在 Excel 中,该行没有问题。 是行不正确还是 DIM 类型(字符串)不正确?

我的 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

【问题讨论】:

  • 如有疑问,请使用“变体”
  • MatchCrt & lOccurance,我相信会返回很长时间。另外,可能是因为它是一个数组公式,工作的Excel公式是一个数组公式吗?。
  • 您根本无法在 VBA 中执行 1 / (Enc5.Range("A:A") 之类的操作,也无法使用 = 将数组与值进行比较。您必须将公式传递给Evaluate,或循环遍历范围。
  • @Rory,我尝试评估 lookup 函数。你能告诉我为什么我会收到同样的错误信息吗? ar = Evaluate(" =Lookup(2, 1/('Sheet1'!A:A = 'Sheet2'!D2),'Sheet3'!D:D) ") 在 MrExcel 上,同样的公式适用于某人。
  • 这些实际上是正确的工作表名称吗?从您的原始帖子中看起来并非如此。完全按照将公式放入单元格中的方式使用公式。

标签: excel vba lookup


【解决方案1】:

您的string 将由于您从Lookup 中提取long 值而导致错误

最好的办法是打电话

Dim lOccurence As Variant

如果仍然出现 get 错误,则说明发生了其他事情 - 可能返回值为 null

【讨论】:

    【解决方案2】:

    我在评论部分接受了 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,非常感谢您的耐心和帮助!

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多