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

时间:2019-04-29 11:53:59

标签: excel vba variables declare

一个琐碎的问题,但这引起了我的兴趣。

我经常在调试模式下动态地编辑代码。我这样做是为了迅速检查所做的性能修改。

在调试模式下,如果不抵制警告消息,则无法删除或更改Dim语句:

  

此操作将重置您的项目,继续执行吗?

我认为这是由于编译器以特定于其数据类型的方式将变量存储在内存中,在代码“运行”期间大概无法更改这些内容。

但是,我注意到,可以在中断模式下添加声明而不会出现任何问题。尝试删除或编辑此行,然后再次引发警告消息。

为什么可以在中断模式下添加但不能删除/编辑声明?

2 个答案:

答案 0 :(得分:2)

我强烈认为VBA运行时会阻止您修改符号表中的现有条目。考虑您做过类似的事情

Dim i as Integer
i = 3
Debug.print i

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

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

顺便说一句:如果您删除Option Explicit(我知道您和我从不这样做...),并为(未声明)变量分配值:现在将该变量放入符号表中,如果您尝试立即添加Dim语句,您将获得This action will reset...消息。

答案 1 :(得分:0)

看来,如果您打开一个工作簿,该工作簿甚至在其项目中声明了一个公共函数并启用了“状态丢失前通知”VBE 选项,VBE 将提示您“此操作将重置您的项目,仍要继续? ”一旦您尝试更改此函数的声明行,就会立即发送消息。可能是因为 Excel 以某种方式“加载”了一个将保存返回值的变量...