Собственность VBA, вызывающая Get вместо Let - PullRequest
0 голосов
/ 15 декабря 2018

Здравствуйте. Я пытаюсь реализовать интерфейс, чтобы иметь несколько моделей и передавать разные модели различным методам.В этом случае я пытаюсь установить переменную книги, но не могу понять, почему это вызывает метод 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

Может кто-нибудь объяснить, почему это происходит

1 Ответ

0 голосов
/ 15 декабря 2018

Основная проблема заключается в том, что вы определили метод доступа Property Let вместо Property Set.Property Let обычно предназначен для присвоения типов значений, а Property Set - для назначения типов объектов.

Вызов Property Get происходит из-за следующего абзаца в разделе 5.4.3.9 Спецификация языка VBE , которая описывает резервный механизм в случае отсутствия Property Set.

Если l-выражение классифицируется как свойство или функция иотносится к вмещающему свойству Get или функции, присваивает значение принудительного выражения возвращаемому значению вмещающей процедуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...