您好,我正在尝试实现一个接口,以便可以拥有多个模型并将不同的模型传递给不同的方法。在这种情况下,我试图设置一个工作簿变量,但似乎无法理解为什么这是调用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的费用模型中:
'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
有人可以解释为什么会这样吗
答案 0 :(得分:4)
这里的基本问题是您定义了一个Property Let
访问器而不是Property Set
访问器。 Property Let
通常用于值类型的分配,Property Set
通常用于对象类型的分配。
之所以发生对Property Get
的调用,是因为VBE Language specification的5.4.3.9节中的以下段落,该段落描述了在没有Property Set
的情况下的回退机制。
如果 l-expression 被归类为属性或函数,并且是指 封闭 财产获取 或函数,将强制表达式的值分配给封闭过程的返回值。