2012-11-02 66 views
11

我在Excel VBA中使用類模塊中定義的枚舉。這一直工作正常,但我已經開始讓每個我做枚舉變量的比較時編譯錯誤:VBA枚舉會偶爾出現「Constant Expression Required」錯誤

在課堂CExample:

Enum MyEnum 
    Foo 
    Bar 
End Enum 

在別處:

If someValue = myEnum.Foo Then 

文本.Foo將突出顯示,並彈出「編譯錯誤:需要常量表達式」消息。

Google上的搜索表明,這可以隨機發生,並修復了重新啓動IDE或在枚舉聲明後添加空格可以使其重新開始工作。

這真的是在VBA一個已知的bug?有什麼我可以做,以避免它發生,或可靠地讓VBA再次運作,如果它出現了?

就我而言,關閉並重新打開Excel沒有幫助。對不起,我重新啓動我的電腦。重啓後

更新:

問題重新啓動我的機器,這是令人驚訝後持續存在。我試着在枚舉定義前添加Public(它們的意思是public by default,但我想我會試試看),並且錯誤消失了。我已經刪除了Public關鍵字(所以我們回到我原來的代碼),它仍然編譯和運行良好。

看起來這是VBA中的一個隨機錯誤。我有興趣知道經驗豐富的開發人員是否經常發現這種情況 - 您是否建議不要使用枚舉?或者它會在藍色月亮中彈出一次,我只是不幸運?

6周進一步發展後更新:

的問題我的時間開發這個項目的剩餘時間內未復發,所以看起來這是一個罕見的問題。

+1

當你做'如果someValue = Foo會發生什麼然後...'?消除'myEnum.'我的意思是 –

+0

重新啓動後,問題仍在發生。感謝您的建議Cthulhu,但這並沒有幫助 - 相同的編譯錯誤。 –

+1

似乎是一個錯誤。將同一模塊的代碼複製到新的代碼中,然後重新編譯。這似乎解決了一些。 –

回答

6

正如問題所述,我通過編輯並保存枚舉定義,然後再次撤消編輯和保存來擺脫錯誤。最近在項目上做了一些更多的工作,我發現了一個不同但相似的問題 - 一行代碼會給出一個「類型不匹配」錯誤,其中沒有類型不匹配,並且相同的函數沒有改變,可以正常工作相同的輸入。

我看到的一些間歇性錯誤可能是由於Excel文件中的代碼人工製品累積造成的 - 在完成一些閱讀後,我發現VBA代碼被編譯並保存到文件中。沒有「乾淨」或「重建全部」選項 - VBA試圖自行解決需要進行哪些增量更改。這可能會導致項目中出現各種奇怪的運行時行爲,因爲您已經做出了很多代碼更改。這可能是我在本工作手冊的初始開發過程中發現的枚舉錯誤的原因。本文中的「What It Means to Decompile and Compact in VBA」部分給出了一個很好的概述。

大多數提到這個問題的人推薦使用VBA CodeCleaner:http://www.appspro.com/Utilities/CodeCleaner.htm。知名且備受推崇的VBA專家Chip Pearson表示:「我強烈推薦此插件」「。我很驚訝我以前沒有遇到過這個!

5

似乎是一個錯誤。

將同一個模塊的代碼複製到一個新的代碼並重新編譯。這似乎解決了一些。

存在類似的修復方法,它涉及在枚舉定義的行上進行編輯和撤消操作。

如果這是一個常見問題,請考慮切換到數字常量。

0

一個古老的問題,但只是經歷了這一點。刪除了Enum上的公共定義者,它編譯得很好。沒有重新啓動IDE。令人驚訝的是仍然在這裏。