VBA - 命名和实例化类模块

时间:2013-12-10 13:04:18

标签: vba naming-conventions name-collision

考虑名为MyClass

的班级模块

可以使用:

通过早期绑定进行实例化
Dim cls As MyClass
Set cls = New MyClass

但是可以用以下方式实例化:

Dim MyClass As MyClass
Set MyClass = New MyClass

因此,您使用具有相同名称的对象。

这有什么问题?

1 个答案:

答案 0 :(得分:3)

VBA与C#不区分大小写,因此class1Class1是相同的事情。

没有任何严重错误(意思是:因为编译器允许......)与对象实例使用相同的名称作为其类,除了通常它将被认为是一个非常糟糕的编程练习使用与类实例相同的名称作为其类。

唯一的问题是,对于将来会触摸您的代码甚至自己的下一个开发者,您可能会对此感到困惑。你可以随时右键单击变量的名称并选择定义,但是在漫长而错误的运行中,这将是一个真正的痛苦...

假设somone为您提供了20K +代码行,包含50个类和150个实例。他说:有些东西不起作用,你就是那个调试并发现错误的人......我不想碰那个......

您可以在VBA中执行此操作的原因是您无法在VBA中创建自己的静态类,因此类不会公开任何属性,因此在调用Class1实例时不能是静态的智能只会向您显示实例的可用属性 - 而不是类。 VBA也不支持类多态(因此没有内部保护等访问器),因此无法从类派生。