gpt4 book ai didi

VBA:为什么 Not 运算符会停止工作?

转载 作者:行者123 更新时间:2023-12-03 07:50:17 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Weird behaviour of NOT

(3 个回答)


1年前关闭。




这让我完全不知所措。

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 的大多数 bool 类型属性继续使用 -1 表示 True(例如,Font.Bold),这让使用新语言的 Interop 的程序员感到困惑和沮丧。因此,在某些时候,Microsoft 的一些开发人员决定使用新方法并将整数值 1 分配给 True 以实现某些新功能。如FitText .

考虑以下代码示例,其中 X类型为 Booleany类型 Integer :

  • FitText为真,整数值为 1
  • 如果反转值,使用 Not显示 bool 值保持“真”,因为它的整数值不是 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

    关于VBA:为什么 Not 运算符会停止工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59310779/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com