Function Foo(thiscell As Range) As Boolean
Foo = thiscell.hasFormula And (InStr(1, UCase(Split(thiscell.formula, Chr(40))(0)), "bar") > 0)
End Function
Run Code Online (Sandbox Code Playgroud)
此函数用于在(.)之前测试某个子字符串(在本例中为bar)的存在.
我遇到问题的情况是当传入函数的单元格为空时,thisCell.hasFormula为false,但是仍然正在评估和之后的语句.这给了我运行时超出范围错误的下标.
VBA是否真的继续评估And的第二个参数,即使第一个参数是假的?
我遇到了一些布尔变量的怪异行为;下面的代码同时打印“ Hello”和“ There”,意思是result&NOT result都计算为True
Dim result As Boolean
result = PostMessage(Application.hWnd, 275, 0, 0)
Debug.Print "Post message: "; result
If result Then Debug.Print "Hello"
If Not result Then Debug.Print "There"
Run Code Online (Sandbox Code Playgroud)
产出
Post message: True
Hello
There
Run Code Online (Sandbox Code Playgroud)
根据文档,PostMessage的声明如下:
Dim result As Boolean
result = PostMessage(Application.hWnd, 275, 0, 0)
Debug.Print "Post message: "; result
If result Then Debug.Print "Hello"
If Not result Then Debug.Print "There"
Run Code Online (Sandbox Code Playgroud)
带有评论:
如果函数成功,则返回值为非零。
这是我在VBA中的方法:
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" …Run Code Online (Sandbox Code Playgroud)