在VBA模块中管理常见的用户定义类型的最佳方法是什么?

我在不同模块中使用相同的用户定义类型。例如,我经常需要表示(x,y)点,所以我最终得到了这个 Type 在不同的模块中:

Type XYpointType
    x As Double
    y As Double
End Type

我通过类型的论点 XYpointType 在不同模块中的subs和功能。

但是,我怀疑这是管理用户定义类型的糟糕方法。完全相同 Type 定义代码最终以许多不同的模块结束。

另外,我可以 Type 单个中央“类型”模块中的声明以及需要此特定类型的所有其他模块,应参考类型模块。不利的一面是每个模块都失去了“模块化”,因为它必须随身携带的“类型”模块。

有什么建议么?

有帮助吗?

解决方案

这很有趣,因为我从来不知道您可以有两个模块均声明具有相同名称的公共类型。现在我知道,我感到震惊。

因此,首先,Eric塔是正确的,您只想将您的类型声明仅放入一个模块中。使用此类型的其他模块将取决于可用的模块,但这只是模块化所带来的东西。所有软件开发都共同管理模块之间的依赖关系。不幸的是,在一个单个VBA项目中(例如您在单个Excel工作簿中找到的类型),管理模块依赖关系的唯一选择是手动。 (在VBA中,“模块”确实是“源代码文件”。其他语言/环境具有各种高级包装系统。)

现在是恐怖的部分。如果您确实在不同模块中声明具有相同名称的类型,则您正在为问题设置自己。考虑两个VBA模块:

'Module1

Public Type typ
    x As String
End Type

Public Sub useTyp()
    Dim t As typ
    t.x = 42

    Debug.Print t.x + t.x
End Sub

'Module2

Public Type typ
    x As Long
End Type

Public Sub useTyp()
    Dim t As typ
    t.x = 42

    Debug.Print t.x + t.x
End Sub

在同一项目中,您的代码将“编译”(至少在Excel VBA中)。但是两个“ USETYP”潜艇提供了不同的输出。更糟糕的是,如果您从其中一个模块中删除了一种类型声明,那么您突然更改了同一模块中“ USETYP”例程的行为!这种歧义永远是不可取的。

发生的事情是,VBA确实创建了两种不同类型的“ module1.typ”和“ module2.typ”。当您在同一模块中并且不符合限定类型名称时,VBA默默地找到“正确”类型并使用它。

我很惊讶地听到您正在将一个“ xypointtype”的实例传递给具有不同的“ xypointtype”声明的模块。这并不重要,但是您可以发布代码吗?我对像这样的nitpicky东西感兴趣...

其他提示

使用第二种方法。关键是制作可重复使用的类型斑点。要重复使用,必须分开。然后,是的,每个使用这些类型的模块都必须引用该斑点。但是,关于模块相互呼叫的模块,需要他们称之为模块的表格,也可能会说同样的话。

您还可以为Xypoint创建类。这将使您拥有自定义功能,如果您需要走这条路,方法。与课程相比,类型非常有限。

这是让您入门的好资源: http://www.cpearson.com/excel/classes.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top