vba - VBA:为什么 Not 运算符会停止工作?
问题描述
这让我彻底懵了。
Sub testChangeBoolean()
Dim X As Boolean ' default value is False
X = True ' X is now True
X = Not X ' X is back to False
End Sub
但我试图在表格单元格(在 Word 中)中切换 .FitText 属性。.FitText 以 True 开头。
如果我将其分配给 X:
Sub testChangeBoolean()
Dim X As Boolean ' again, default is False
X = Selection.Cells(1).FitText ' does set X to True
X = Not X ' X is still True!
End Sub
我只是不明白我做错了什么。
解决方案
我相信解释与旧的编程语言(WordBasic 和早期的 VBA)如何存储 True 和 False 的整数值有关。在那些日子里,True = -1 和 False = 0。
较新的编程语言仍然使用 0 表示 False,但使用 1 表示 True。
大多数 Word 的布尔类型属性继续使用 -1 表示 True(例如,Font.Bold),这导致使用新语言的 Interop 的程序员感到困惑和沮丧。因此,在某些时候,微软的一些开发人员决定使用新方法并将整数值 1 分配给 True 以获得一些新功能。比如FitText
。
考虑以下代码示例,其中X
是类型Boolean
和y
类型Integer
:
- 如果
FitText
为 True,则整数值为 1 - 如果反转值,则 using
Not
表明布尔值保持“真”,因为它的整数值不是 0,而是 -2 - 将整数值直接设置为 True 给出 -1
这确实令人困惑,但确实解释了为什么Not
没有给出预期的结果。
Sub testChangeBoolean()
Dim X As Boolean ' again, default is False
Dim Y As Integer
X = Selection.Cells(1).FitText ' does set X to True
Y = Selection.Cells(1).FitText
Debug.Print X, Y ' result: True 1
X = Not X ' X is still True!
Y = Not Y
Debug.Print X, Y ' result: True -2
X = False
Y = True
Debug.Print X, Y ' result: False -1
End Sub
推荐阅读
- python - 使用 pyspark 的 Py4JJavaError 决策树预测
- python - “表达式”对象没有属性“秒”
- laravel - Laravel 中间件未附加到某些请求
- java - 在测试类中初始化变量时,在java中使用父引用类型访问变量
- javascript - 移动菜单的切换无法正常工作
- python - 将多个小字符串连接成一个长字符串
- swift - 如何在 Alamofire 多部分数据上传中将空间作为空间而不是 %20 发送?
- android - Firemonkey 相机组件太慢
- android - 我只用了安卓lottie库,字体没怎么碰,但是为什么会出现字体错误呢?
- r - 更改点图比例颜色