如何在 VBA 中分配具有多种数据类型的数组,然后在需要某些数据类型的函数中使用这些数据?



我正在开发一个对几个物理元素进行计算的程序。大约有 5 种类型的元素,每种都需要不同的输入(具有不同的数据类型(来进行计算。元素的数量或计算顺序没有限制。

例如:第一组数据可能具有类型 A 的元素、B 类型的元素和类型 A 的第二个元素。

第二组数据可能具有 C 类型的元素、B 类型的元素和 A 类型的五个元素。

元素类型 A 可能具有类型(字符串(输入和压力(双精度(输入。 元素类型 B 可能具有类型(字符串(输入、长度(双精度(输入、鳍数(整数(输入。 元素类型 C 可能具有长度(双精度(输入、直径(双精度(输入和数量(整数(输入

由于我事先不知道元素的数量或类型,我一直在使用一个变体数组,该数组具有可以在用户选择元素后分配的行数,以及等于任何元素所需的最大数据点数的列数。

问题是,当我尝试在其他函数中使用该数据时(通过调用 Array(1,2((,我得到一个"byref 参数类型不匹配"错误。

据我所知,这意味着我的程序不知道我的数组插槽中包含的值可以/应该是正确的数据类型。 它只看到"变体"而不是"双精度"或"字符串"并抛出错误。

我找到了几种解决此问题的方法。 1(调用函数时可以将数据放在括号中。显然,这会强制数据符合预期的数据类型。函数(输入 1, (数组(1,2((, 输入 3(

2(我可以进入我的所有函数并将预期的数据类型更改为变体。

问题是我正在执行工程计算,我关心的是保持数字的一定程度的准确性。如果输入没有意义,我也真的不希望我的函数能够运行。在我看来,选项 1 在强制转换期间丢失重要数据的风险很高。我不确定选项 2 是否更好,因为 vba 似乎没有像我想象的那样分配/跟踪这些数据类型。

有没有更好的方法来分配和传输各种类型的数据?

听起来您可能应该为不同的元素类型创建一些自定义类型或类(其中每个类都有具有特定数据类型的成员(,然后您可以将它们添加到集合/数组中并传递进行处理。

例如使用类:

几个非常基本的类(只是公共变量,没有方法(:

'class module clsA
Public MyType As String
Public Pressure As Double
'class module clsB
Public MyType As String
Public Length As Double
Public FinCount As Integer

在常规代码模块中:

Sub tester()
Dim colThings As New Collection, e
colThings.Add MakeTypeAThing("TypeA", 67.92)
colThings.Add MakeTypeBThing("TypeB", 19.56, 4)
colThings.Add MakeTypeAThing("TypeA", 0.38)
For Each e In colThings
Debug.Print TypeName(e)
Next e
End Sub

'Couple of "factory" functions to create instances of your classes
'  and set the member fields
Function MakeTypeAThing(typ As String, Pressure As Double) As clsA
Dim rv As New clsA
rv.MyType = typ
rv.Pressure = Pressure
Set MakeTypeAThing = rv
End Function
Function MakeTypeBThing(typ As String, l As Double, Fins As Integer) As clsB
Dim rv As New clsB
rv.MyType = typ
rv.Length = l
rv.FinCount = Fins
Set MakeTypeBThing = rv
End Function

相关内容

  • 没有找到相关文章

最新更新