在VBA中将对象传递给过程

12 浏览
0 Comments

在VBA中将对象传递给过程

我正在开发一个简单的工具,可以让我解析多个CSV文件,并将它们融合到一个新的工作表中。以下是我的实现(我简化了它)以及我的问题:

类A

私有变量类型
用于访问变量的属性方法

类B

私有变量类型
用于访问变量的属性方法

类C

私有cA作为ClassA
私有cB作为集合(ClassB的集合)

类D - 我的问题的一部分

私有cC作为集合(ClassC的集合)

'其他成员变量及其属性的获取/设置

公共子过程AddA(A作为ClassA)

如果cC.Item(A.foo)为Nothing,则

声明tempC作为ClassC

设置tempC为新的ClassC

tempC.A = A

结束If

结束子过程

主模块 - 我问题的另一部分

Dim cC作为新的ClassC
'初始化Class C,这一切都正常工作
Dim tempA作为ClassA
设置tempA为新的ClassA
'设置tempA的属性
cC.AddA tempA  '这是我的错误所在

我尝试了使用ByValByRef传递参数,每个都给我不同的错误("byref argument type mismatch","invalid procedure or argument","Object doesn't support this property or method")

我不知道接下来该尝试什么,我甚至尝试了括号“thing”,据说可以强制参数为ByVal或ByRef,我记不清了,那是昨天的事。

谢谢。

0
0 Comments

问题的出现原因是在VBA中将对象传递给过程时的错误使用。在代码中,将一个对象赋值给另一个对象的属性时,应该使用Set关键字,而不是简单地赋值。此外,在D类中无法访问C类的私有字段A,需要将其设置为公共字段或在C类中创建一个公共的SetA()方法,并从D类中调用它。

解决方法是使用Set关键字将对象赋值给属性,并确保在访问其他类的私有字段时进行适当的访问控制设置。此外,设置适当的错误跟踪设置可以帮助定位问题所在。

虽然这段代码并没有解决问题,但它引导我朝正确的方向寻找解决方法,并且我之前并不知道错误跟踪设置(这对我帮助很大),所以我将其标记为答案。

0