vbTrue不是True

Roy*_*Roy 2 excel vba userform

Excel常量"True"的计算结果为True,常量"vbTrue"的计算结果为-1.我一直认为这些在VBA代码中可以互换,但事实并非如此.这两个常量产生不同结果的一个地方是设置CheckBoxes.将CheckBox.value设置为True会产生预期结果,但将其设置为vbTrue会使CheckBox保留为TripleState.

Sub setCkBox1()
       CheckBox1.TripleState = False
       CheckBox1.Value = vbTrue   '<<<< the check mark is dimmed to show TripleState is True
       Debug.Print CheckBox1.TripleState: Stop  '<<<< even though it won't admit it

       CheckBox1.Value = True  '<<<< check mark is not dimmed

End Sub
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,VBA中的其他两个常量是不可互换的?

RBa*_*ung 7

True是一个布尔值,vbTrue是一个Long.在Booleans和Longs不可互换的任何地方,它们都不可互换.

  • 实际上,它是来自TriState,IIRC的Enum成员.但无论如何,常量(和Enum成员)也有一个数据类型.查看来自`TypeName(vbTrue)`的返回字符串,看看这个. (2认同)