1

我知道有很多关于这个的线程和问题,而且很明显,一般来说,错误在哪里。大多数人在移动对象时不使用 SET 关键字。我是。

这是正在发生的事情:

这是在一个 Excel 表中,所以我制作了一组函数来跟踪列并创建索引,这样每次应用程序运行时它都会重新索引列,这样我就可以.Cells(row_num, pCust_index("custID"))在列更改的情况下执行操作。

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

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

很直接对吧?获取一个字典对象,重置我的索引并指向现有的传递对象。

现在,在调用表单上,我有另一面:

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 调用上收到 Invalid Use of Property 编译器错误。

我错过了什么?

4

1 回答 1

2

大多数人在移动对象时不使用 SET 关键字

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

很直接对吧?

不完全的。您创建一个字典,立即丢弃它并替换为作为参数传递的另一个字典。您应该删除两行中的第一行,并制作 param ByVal

Public Property Set set_cust_index(ByVal custIndex As Dictionary)
    Set pcust_index = custIndex
End Property

我收到 Invalid Use of Property 编译器错误

您声明了一个属性,然后将其用作子对象。有了一个属性,你应该这样做:

Set contForm.set_cust_index = pCust_index

在这一点上,这个set_cust_index名字看起来并不好。它将为 sub ( Public Sub set_cust_index(ByVal custIndex As Dictionary)) 取一个合理的名称,但对于属性,您最好使用Public Property Set cust_index(ByVal custIndex As Dictionary).

于 2013-07-07T20:10:32.160 回答