【问题标题】:MS Access DLookup Multiple lookup Runtime error 13 type mismatchMS Access DLookup 多重查找运行时错误 13 类型不匹配
【发布时间】:2018-08-30 14:53:39
【问题描述】:

我有一个我认为很简单的问题,但我一定遗漏了一些东西。

这行 VBA 有效:

If Me.To = 340 And DLookup("[LocID]", "[qryMyLocation]") = "C25" Then

但是,我需要针对 2 个 LocID 进行测试,但这不起作用:

If Me.To = 340 And DLookup("[LocID]", "[qryMyLocation]") = "C25" Or "C20" Then

我错过了什么 - 以上可能吗?

我在尝试第二行代码时收到错误:运行时错误 13 类型不匹配

【问题讨论】:

  • "C20" 不是布尔表达式。 DLookup("[LocID]", "[qryMyLocation]") = "C20" 是。

标签: ms-access vba


【解决方案1】:

这是因为你需要重新编写比较,VBA不将“C20”理解为有效的布尔表达式。

If Me.To = 340 And ((DLookup("[LocID]", "[qryMyLocation]") = "C25" Or DLookup("[LocID]", "[qryMyLocation]") = "C20")) Then

要获得更快的结果,您可以将 DLookup 存储到一个变量中。

Dim LocID as Variant 'Put the right type here, I think it should be String
LocID = DLookup("[LocID]", "[qryMyLocation]")
If Me.To = 340 And (LocID = "C25" Or LocID = "C20") Then

编辑:由于运算符优先级,我添加了与接受的答案相同的括号。省略括号会导致

If (Me.To = 340 And LocID = "C25") Or LocID = "C20" Then

【讨论】:

  • 如果我使用变量解决方案,我会收到运行时错误 91 - 对象变量或未设置块变量
  • 使用Dim Val As Variant
  • 编辑修复类型,我总是把它们混在一起
  • 只是让你知道,val 也是一个函数名,用于评估字符串以查看它是否为数字
【解决方案2】:

你很亲密。试试这个:

If Me.To = 340 And (DLookup("[LocID]", "[qryMyLocation]") = "C25" Or DLookup("[LocID]", "[qryMyLocation]") = "C20") Then

请注意,我也添加了一些括号。

【讨论】:

    【解决方案3】:

    查找只返回一个结果,但您可以在条件中添加所需的结果并对返回的结果进行计数。

    If Me.To = 340 And DCount("[LocID]", "[qryMyLocation]", "[LocID] = 'C25' Or [LocID] = 'C20'") > 0 Then
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多