在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)