gpt4 book ai didi

vba - 跨各种模块管理用户定义的类型

转载 作者:行者123 更新时间:2023-12-04 19:28:58 24 4
gpt4 key购买 nike

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

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

Type XYpointType
x As Double
y As Double
End Type

我传递类型为 XYpointType 的参数往返不同模块中的子和函数。

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

或者,我可以拥有这个 Type在单个中央“类型”模块中声明,以及需要此特定类型的所有其他模块应引用类型模块。缺点是每个模块都失去了它的“模块化”,因为无论走到哪里,它都必须伴随着“类型”模块。

有什么建议么?

最佳答案

这很有趣,因为我从来不知道你可以有两个模块都声明一个同名的公共(public)类型。现在我知道了,我很害怕。

因此,首先,Eric Towers 是正确的,您只想将您的类型声明放在一个模块中。使用此类型的其他模块将取决于该模块是否可用,但这只是模块化带来的。所有软件开发都需要管理模块之间的依赖关系。不幸的是,在单个 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”声明的模块,我感到有些惊讶。这不是那么重要,但是您可以发布代码吗?我对这种挑剔的东西很感兴趣...

关于vba - 跨各种模块管理用户定义的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3977994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com