在VBA中使用属性集时出现“属性的无效使用”
我知道有很多关于这个问题的线程和问题,一般来说,这个错误是很明显的。 移动物体时,大多数人不使用SET关键字。 我是。
这是发生了什么事情:
这是在一个Excel表中,所以我做了一些function,以跟踪列和索引,以便每次运行应用程序将重新索引列,所以我可以做像.Cells(row_num, pCust_index("custID"))
以防列更改。
我有一个名为custContagions的表单。 这只是一个模式窗口,允许用户添加/删除/编辑客户的传染状态。 它包含一个属性:
Private pCust_index as dictionary
它也包含这个属性setter:
Public Property Set set_cust_index(ByRef custIndex As Dictionary) Set pCust_index = New Dictionary Set pcust_index = custIndex End Property
相当直线前进吗? 获取字典对象,重置我的索引并指向现有的传递对象。
现在,在呼吁forms我有另一边:
Private Sub newCustContagious_LBL_Click() Dim contForm as New custContagions Call contForm.set_cust_index(pCust_index) 'note pCust_index is a private here too Call contForm.Show ...
在set_cust_index调用中,我收到了无效使用属性编译器错误。
我错过了什么?
移动物体时,大多数人不使用SET关键字
那么他们不是在移动物体。 Set
关键字是移动对象的方式。
也有CopyMemory
直接复制ObjPtr
,但我不相信大多数人这样做。
相当直线前进吗?
不完全的。 你创build一个字典,立即丢弃它,并replace为另一个字典作为parameter passing。 您应该删除两行中的第一行,并使参数ByVal
:
Public Property Set set_cust_index(ByVal custIndex As Dictionary) Set pcust_index = custIndex End Property
我收到属性编译器错误的无效使用
你声明一个属性,然后用它作为一个子。 有了财产,你应该做的:
Set contForm.set_cust_index = pCust_index
此时set_cust_index
名称看起来不太好。 这将是一个明智的名字为一个子( Public Sub set_cust_index(ByVal custIndex As Dictionary)
),但是对于一个属性,你最好用Public Property Set cust_index(ByVal custIndex As Dictionary)
。