PHV,
I agree with your point about late binding. I choose to use the best of both worlds.
I use early binding (if it is available) for development so that I can make use of Intellisense ... I use it so much, I forgot it had a name.
Then if there is an advantage to late binding, I convert over to late binding.
I like the idea about using a cross between Hungarian and proper english. I also like a 3 or more character lower-case prefix to indicate data type, but I go one step further.
For regular variables, I use something like: bln_IsVisible, int_MyNumber, dbl_MyOtherNumber
For constants, I precede the 3 character prefix with the lowercase "c". Example: cint_MyNumber, etc.
If the variable or constant is scoped at the module-level, I tack on an "m". Example: mcint_MyNumber, mbln_IsTrue
This last convention tells me to look in the module declaration area to find the dimensioning statement.
Finally, if the variable is a global or publicly declared constant or variable, I put all of those in one standard module (named "mod_Globals"; all dimension statements, no subs or functions) and the statements would look like the following:
Public Constant gcdbl_PI as Double = 3.14 'etc
Public gbln_ConditionIsTrue as Boolean
This convention tells me that I can find the constant or variable in one specific module, whether the item is a constant or variable, that it is globally scoped, and gives me its datatype.
From my previous Oracle background, I use the underscore to set off the prefix ... personal preference ... makes it easier for me to visually parse the name and the prefix tag.
All of this is a cross between some defacto standards and personal preference. There are probably folks who would get all over my case for inventing another style, but I find it conveys more of the info that I want and is easier to understand.
Cheers!
-- Tom Carnahan <><