作为一名Java和Javascript开发人员,在使用excel-vba中的对象和类(我们在vba中使用术语class
吗?)时遇到了一些麻烦。我知道我可以传递对象ByVal
或ByRef
,我必须(手动)使用ReDim
扩展我的数组。
关于我的问题:我尝试创建一个客户列表。客户有地址和名称。姓名是一个简单的String
,并且可以解决另一个类。我遍历一个Cells
列表,在重新调整我的数组后,我添加了一个带有以下snipplet的新客户(extractAddress
返回一个地址对象):
ReDim Preserve customers(i)
Set customers(i) = New Customer
Call customers(i).create(Sheets("Customers").Cells(pos, 1), extractAddress(Val(pos)))
' ^^^ error's here ^^^
我的客户班级' create
方法看起来像
Public Sub create(name As String, ByRef address As address)
CustomerName = name
CustomerAddress = address
End Sub
运行此代码时,我得到运行时错误91:对象变量或未设置块突出显示行的错误。 extractAddress
成功返回一个对象(不是Nothing
)。我不知道哪个对象变量没有相应设置。
我尝试将create
方法更改为仅将名称或地址作为参数,但这两种方法都没有解决我的问题。如果我注释掉错误的行,我的脚本(显然)工作得很好。因此,我认为我的Call
。
附带问题:当我的所有其他自定义类小写时,为什么vba代码编辑器是camel-casing客户?
附录:
extractAddress
功能
Private Function extractAddress(row As Integer) As address
Dim address As New address
Call address.create(Sheets("Customers").Cells(row, 2), Sheets("Customers").Cells(row, 3), Sheets("Customers").Cells(row, 4), Sheets("Customers").Cells(row, 5))
Set extractAddress = address
End Function
答案 0 :(得分:4)
将变量设置为对象时,需要使用Set
。
因此,请在Customer.create
方法
CustomerAddress = address
到
Set CustomerAddress = address