I had an odd problem with VBA today.
I used a table driven menu builder (don’t we all), and I define the column numbers of that table in an enumerated list. This is that list
Private Enum CB_COLUMNS
CB_LEVEL_COL = 1
CB_CAPTION_COL = 2
CB_POS_MACRO_COL = 3
CB_TAG_COL = 4
CB_PARAMETER_COL = 5
CB_SHORTCUT_COL = 6
CB_SPACES_COL = 7
CB_DIVIDER_COL = 8
CB_FACEID_COL = 9
CB_VISIBLE_COL = 10
CB_ENABLED_COL = 11
CB_TYPE_COL = 12
CB_DEBUG_COL = 13
End Enum
I was making some changes to the application today, and I suddenly got an error where the values in this list were being used, an error suggesting that a constant expression was required (sic!).
Very odd. How did I fix it? I changed the enum scope from Private to Public, and then my application compiled fine. I set it back to Private and it still compiled fine, and is working okay again.
Anyone else ever seen this?
Code cleaner?
(always my first thought with any VBA oddities)
I code clean my apps every build, so I like to think my apps are healthy. But of course, I cannot tell as I cannot reproduce it at will. Odd though.
I have seen cases where using code cleaner does not suffice and I had to actually copy the code into notepad, remove the module, insert a fresh module and copy/paste back from notepad to VBA.
@Jan Karel, how do you know Code Cleaner did not suffice? Was a continuation of odd problems like the one I describe?
As it happens, this is a problem I do get quite often, but normally in my procedures where I declare a constant with the procedure name. I get this same error and have to remove the constant completely, and re-enter it.
Bob that sounds like a name registration conflict. It sounds like the compiled version of your code is not getting fully updated – leaving in the old scope version.
Does it go away if you comment out all the option explicits compile and uncomment and recompile? (thats to best way I know of forcing a full compile)
@Simon, it is hard to say as I cannot force the issue, it just happens. I will try what you say, but I am not sure what it will prove if t does work thereafter, my approach works already (although I don’t know how or why – maybe I am forcing a full re-compile).
If I am going to strip out all the Option Explicits and then put them back again I am going to have to write code to do thsi.
Great. Now i can say thank you!,
Great work,webmaster,nice design!,