相关疑难解决方法(0)

当第一个参数为false时,VBA"And"运算符是否会计算第二个参数?

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的第二个参数,即使第一个参数是假的?

excel vba operators

48
推荐指数
2
解决办法
2万
查看次数

NOT的怪异行为

我遇到了一些布尔变量的怪异行为;下面的代码同时打印“ Hello”和“ There”,意思是resultNOT 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)

winapi vba boolean

5
推荐指数
1
解决办法
139
查看次数

标签 统计

vba ×2

boolean ×1

excel ×1

operators ×1

winapi ×1