VBA is not case sensitive like C# so class1
and Class1
are the same things..
There is nothing seriously wrong (meaning: since the compiler allows that...) with using the same name for an object instance as its class except in general it would be considered a really bad programming practice to use the same name for class instance as its class.
The only issue is that for the next dev who will touch your code or even yourself in the future you may be really confused looking at this. You can always right click the name of the variable and select definition but in a long and buggy run, this would be a real pain in the back...
Suppose somone gave you 20K+ lines of code with 50 classes and 150 instances of it. He says: something doesn't work and you're the one to debug and find what's wrong... ugr I wouldn't want to touch that...
The reason you can do that in VBA is because you can't create your own static classes in VBA, therefore a class doesn't expose any properties and can't be static so when calling the Class1
instance the intelli-sense will only show you the instance's available properties - not classes'. VBA also doesn't support class polymorphism (so no accessors like internal protected etc) so there isn't possible to derive from classes.