我正在使用Excel VBA中的类模块中定义的枚举.这一直很好,但每次我对枚举变量进行比较时,我都开始遇到编译错误:
在类CExample中:
Enum MyEnum
Foo
Bar
End Enum
Run Code Online (Sandbox Code Playgroud)
别处:
If someValue = myEnum.Foo Then
Run Code Online (Sandbox Code Playgroud)
文本.Foo
将突出显示,并弹出"编译错误:需要常量表达式"消息.
在谷歌上搜索表明这可能是随机发生的,并且修复如重新启动IDE或在枚举声明后添加空格可以使其重新开始工作.
这真的是VBA中的已知错误吗?有什么我可以做的,以避免它发生,或可靠地让VBA再次工作,如果它确实突然出现?
在我的情况下,关闭和重新打开Excel没有帮助.对不起,我重新启动电脑.
重启后更新:
重启我的机器后问题仍然存在,这是令人惊讶的.我尝试Public
在枚举定义前添加(默认情况下它们是公开的,但我想我会尝试一下),错误消失了.我删除了Public
关键字(所以我们回到原始代码),它仍然编译并运行正常.
它确实看起来像是VBA中的随机错误.我有兴趣知道经验丰富的开发人员是否经常发现这种情况 - 你会建议不使用枚举吗?或者它是否在蓝色的月亮中突然出现,我只是不走运?
进一步开发6周后更新:
在我开发这个项目的剩余时间里,问题没有再发生,所以看起来这是一个罕见的问题.
我偶尔只使用VBA,每次回到它时我会被以下的一些变化所困扰:
我有一个Range
对象,currentCell
用于跟踪我在电子表格中使用的单元格.当我更新它以指向不同的单元格时,我写道:
currentCell = currentCell.Offset(ColumnOffset:=1)
Run Code Online (Sandbox Code Playgroud)
问题是我忘记了Set
关键字,所以上面的行实际上是使用Range
对象的默认属性:
currentCell.Value = currentCell.Offset(ColumnOffset:=1).Value
Run Code Online (Sandbox Code Playgroud)
所以当前单元格的内容会被新单元格中的内容覆盖,而我的currentCell
变量并没有改变为指向一个新单元格,当我意识到我第一百次犯了同样的错误时,我感到愤怒. .
可能没有一个更好的答案,而不是把一个贴在我的显示器上说"你有没有记得今天使用Set?",但如果有人有任何建议来帮助我,我会很感激听到他们.特别是:
Range.Value
如果这就是我的意思,我总是打电话.