在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")发布于 2020-07-14 11:49:58
虽然不是很优雅,但另一个选择可能是:
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发布于 2020-07-14 11:31:49
找到了解决办法。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语句上做到这一点。也许没有,这是正确的方法。
https://stackoverflow.com/questions/62887311
复制相似问题