首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在excel vba中的同一case语句中使用缺少的值和布尔值

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

Stack Overflow用户
提问于 2020-07-14 10:53:23
回答 2查看 118关注 0票数 1

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

代码语言:javascript
运行
复制
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")。也不希望在函数定义中为可选参数设置默认值。

这些调用中的每一个都应该起作用:

代码语言:javascript
运行
复制
call test        // expect msgBox("foo")
call test("abc") // expect msgBox("bar")
call test(true)  // expect msgBox("foo")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-14 11:49:58

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

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-07-14 11:31:49

找到了解决办法。VBA允许在缺少可选参数时设置默认值。所以这是可行的:

代码语言:javascript
运行
复制
public sub test(optional val as variant = true)
  select case val
    case true: msgbox("foo")
    case else: msgBox("bar")
  end select
end sub

结果与预期一致:

代码语言:javascript
运行
复制
call test        // "foo"
call test("abc") // "bar"
call test(true)  // "foo"

我仍然想知道是否有一种方法可以在case语句上做到这一点。也许没有,这是正确的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62887311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档