如何在 excel vba 中的同一 case 语句中使用缺失值和布尔值

how to use missing and boolean values in the same case statement in excel vba

In VBA (MS Excel 2016):如何在 select case 语句中组合缺失值和布尔值?参数 val 可以作为布尔值传递或根本不传递,或者作为其他意想不到的东西传递。

public sub test(optional val as variant)
  select case val
    case true, isMissing(val): msgbox("foo")
    case else: msgBox("bar")
  end select
end sub

以上导致 运行 时间错误“13”:“case true, isMissing(val):”行上的类型不匹配。

首选是使用相同的 case 语句,允许多个值导致显示 msgbox("foo")。也不想为函数定义的可选参数设置默认值。

这些调用中的每一个都应该有效:

call test        // expect msgBox("foo")
call test("abc") // expect msgBox("bar")
call test(true)  // expect msgBox("foo")

找到解决方法。 VBA 允许在缺少可选参数时设置默认值。所以这有效:

public sub test(optional val as variant = true)
  select case val
    case true: msgbox("foo")
    case else: msgBox("bar")
  end select
end sub

符合预期的结果:

call test        // "foo"
call test("abc") // "bar"
call test(true)  // "foo"

仍然想知道是否有办法在 case 语句上执行此操作。也许没有,这是正确的方法。

虽然不是很优雅,但另一种选择可能是:

Public Sub test(Optional val As Variant)
  Select Case IIf(IsMissing(val), True, val)
    Case True: MsgBox ("foo")
    Case Else: MsgBox ("bar")
  End Select
End Sub