在VBA中使用Property Set时获取“无效使用属性”

时间:2013-07-07 20:02:50

标签: excel vba properties

我知道有很多关于此的线索和问题,通常,错误的地方非常明显。移动对象时,大多数人都没有使用SET关键字。我是。

以下是发生的事情:

这是在excel表中,所以我做了一些函数来跟踪列并创建一个索引,这样每次应用程序运行它都会重新索引列,这样我就可以做{{1如果列更改。

我有一个名为custContagions的表单。它只是一个小模态窗口,允许用户添加/删除/编辑客户的传染状态。它包含一个属性:

.Cells(row_num, pCust_index("custID"))

它还包含此属性设置器:

Private pCust_index as dictionary

挺直接的吧?采用字典对象,重置索引并指向现有的传递对象。

现在,在调用表格中,我有另一面:

Public Property Set set_cust_index(ByRef custIndex As Dictionary)
    Set pCust_index = New Dictionary
    Set pcust_index = custIndex
End Property

我在set_cust_index调用上遇到了无效使用属性编译器错误。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

  

大多数人在移动物体

时没有使用SET关键字

然后他们不会移动物体。 Set关键字是移动对象的方式 还有CopyMemory可以直接复制ObjPtr,但我不相信大多数人会这样做。

  

非常直接吧?

不完全。您创建一个字典,立即丢弃它并替换为作为参数传递的另一个字典。您应该删除两行中的第一行,然后创建参数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)