为什么我可以在调试模式下添加但不能删除 Dim 语句?

Why can I add but not remove a Dim statement in debug mode?

有点琐碎的问题,但引起了我的兴趣。

我经常即时编辑我的代码,换句话说,在调试模式下。我这样做是为了快速检查我为性能所做的编辑。

在调试模式下,如果不反驳警告消息,就不能删除或更改 Dim 语句:

This action will reset your project, proceed anyway?

我认为这是由于编译器以特定于其数据类型的方式将变量存储在内存中,这在代码为 'running'.[=12= 时可能无法更改。 ]

不过,我注意到 添加 中断模式下的声明可以毫无问题地完成。尝试删除或编辑此行然后再次抛出警告消息。

为什么在中断模式下可以添加但不能添加到 remove/edit 声明?

我强烈认为 VBA 运行时会阻止您修改符号 table 中的 现有 条目。想想你做过类似

的事情
Dim i as Integer
i = 3
Debug.print i

您为 Print 语句设置了断点并将 i 的类型更改为 String - 运行时应如何处理 i 的内容?隐式将其转换为字符串?如果无法转换,应该怎么办?

向符号 table 添加新条目不会造成任何损害,因为它不会修改之前所做的任何事情,因此运行时允许您这样做。

顺便说一句:如果你删除 Option Explicit(我知道你和我从来没有这样做......)并为一个(未声明的)变量赋值:这个变量现在被放入符号 table 如果您现在尝试添加 Dim-语句,您将收到 This action will reset...-消息。

看来,如果您打开一个工作簿,该工作簿在其项目中声明了一个 Public 函数并启用了 'Notify Before State Loss' VBE 选项,VBE 将提示您“此操作将重置您的项目,还要继续吗?”一旦您尝试更改此函数的声明行,就会立即收到消息。可能是因为 Excel 以某种方式“加载”了一个保存返回值的变量...