如何从Select Case
语句中的表达式中获取值?
当我们写select case
语句时,我们被告知好的做法是case else
在结尾加上 a。我理解这样做的目的是,如果我们不考虑所有可能的情况,有一种方法可以通知我们,而不是继续前进。通常我只是debug.assert
在这种情况下使用,它非常适合个人调试,有时对于交付后的某些最终用户来说已经足够了。
当我写信给 VBE 时,这不起作用,因为在调用 VBE 后的任何时候都不支持中断。我意识到我可能会先卸载 VBE 对象,然后再卸载debug.assert
,但是如果情况与我正在读/写到 VBE 的内容有关,那将违背暂停我的代码的目的。
在我看来,最简单的解决方案是msgbox TheUnexpectedResultFromMyExpression
,但我不知道如何调用它。第二个最简单的解决方案似乎是对我的用户可能会或可能不会做的事情,以及他们何时以及如何做这件事有充分的预知。我也一直在努力,所以如果你不知道如何返回值,那么也许你有一些关于全知的技巧。
我知道,在大多数情况下,我可以简单地将表达式本身复制到msgbox ...
inside case else
,但我碰巧正在处理基于返回设置对象的决策树的情况,我对这样做两次。另一种选择可能是只是myVariable=<expression>
和select case myVariable
而不是select case <expression>
,然后总是debug.print myVariable
在每个之前select case
,但是我的日志已经很忙了,在一个更大的项目中这样做意味着我必须购买另一台显示器,而我现在正在为杂货而苦苦挣扎。
在这里问似乎更容易。谢谢。
编辑:
对于那些似乎很难理解我要问什么的人,我尽可能简单地简化了代码。显然,下面的内容不是超级有用,但你明白了。
Select Case Forms("Form1").Module.CreateEventProc("Click", Forms("Form1").Controls("label0").Name)
Case 1
Debug.Print "line1"
Case 2
Debug.Print "line2"
Case Else
Debug.Print Forms("Form1").Module.CreateEventProc("Click", Forms("Form1").Controls("label0").Name)
End Select
当我的 Case Else 语句运行时,它可能会在即时窗口中打印表达式的值(我提到的解决方法),并且我知道我可以对 a msgbox
or 变体或其他东西做同样的事情,但它会再次运行代码。是的,正如我上面已经提到的,我可以(在这种情况下)将值分配给 long 然后运行Select Case
从长远来看,但该选项并不能解决我的应用程序中的问题。以免这成为我们讨论使用 VBE 对象的优点的对话,或者试图让我问一个不同的问题,为什么我会得到意外的值(我不是,我正试图计划在运行时进行干净的调试),或者有人问我为什么不能让代码更简单易用,而不是几万行代码再写一千多行代码,那是因为我有一个客户端。他们为他们想要的东西买单。
所以,回到原来的问题,我只想知道如何从select case
表达式中返回值。如果你是一个超级英雄,并且可以在调用 VBE 后让代码暂停,那么一定要回答这个问题,或者补充。