用对象调用sub

时间:2014-06-20 12:47:14

标签: vba oop excel-vba excel

作为一名Java和Javascript开发人员,在使用中的对象和类(我们在vba中使用术语class吗?)时遇到了一些麻烦。我知道我可以传递对象ByValByRef,我必须(手动)使用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

1 个答案:

答案 0 :(得分:4)

将变量设置为对象时,需要使用Set

因此,请在Customer.create方法

中更改此行
CustomerAddress = address

Set CustomerAddress = address