VBA属性调用Get而不是Let

4

你好,我正在尝试实现一个接口,以便可以拥有多个模型并将不同的模型传递给不同的方法。在这种情况下,我正在尝试设置一个工作簿变量,但似乎无法理解为什么这会调用 get 方法而不是 let。

正在设置值的方法:

Public Sub OpenAllWorkbooks(ByRef fromCopyItems As Collection)
    Dim currentCopyItem As ICopyItem
    Dim wb As Variant

    For Each currentCopyItem In fromCopyItems
        ' Set currentCopyItem.ItemWorkBook = OpenWorkbook(currentCopyItem.WorkbookPath) I commented this out to make sure that was set currentCopyItem = whatever was the error
        Set wb = OpenWorkbook(currentCopyItem.WorkbookPath)
        Set currentCopyItem.ItemWorkBook = wb ' It breaks here
        currentCopyItem.IsOpen = True
    Next currentCopyItem

End Sub

这是实现ICopyItem接口的Expense模型中的内容:
'Calling this instead of let
Public Property Get ICopyItem_ItemWorkBook() As Workbook
    Set ICopyItem_ItemWorkBook = Item.ItemWorkBook 
End Property

这应该是它需要调用的内容:
Public Property Let ICopyItem_ItemWorkBook(value As Workbook)
    Set Item.ItemWorkBook = value
End Property

有人能解释一下为什么会发生这种情况吗?

1个回答

4
基本问题在于您定义了一个Property Let访问器,而不是Property Set访问器。Property Let通常用于分配值类型,Property Set用于分配对象类型。
调用Property Get的原因是来自VBE语言规范第5.4.3.9节中以下段落所述的后备机制,以防没有Property Set

如果l-expression被分类为属性或函数并引用了包含的Property Get或函数,则将强制表达式值分配给包含过程的返回值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接