Установить свойство класса vba с помощью ссылки на объект - PullRequest
16 голосов
/ 23 февраля 2011

У меня есть модуль класса с именем Normal в VBA со следующим кодом:

Private mLine As LineElement

Public Property Get Line() As LineElement
    Line = mLine
End Property

Public Property Set Line(ByRef vLine As LineElement)
    mLine = vLine
End Property

Этот класс используется следующим кодом:

Sub Run
    Dim Line As LineElement
    Set Line = New LineElement

    Dim Norm As Normal
    Set Norm = New Normal
    Set Norm.Line = Line 'FAILS here with "Object Variable or With Block Variable not set"'
End Sub

Кроме того, если я изменю код в модуле класса Normal на:

Private mLine As LineElement

Public Property Get Line() As LineElement
    Line = mLine
End Property

Public Sub SetLine(ByRef vLine As LineElement) 'changed from property to sub'
    mLine = vLine
End Property

и ошибочная строка

Norm.SetLine( Line )

Я получаю сообщение об ошибке «Объект не поддерживает это свойство или метод». Что именно я делаю не так в обоих случаях?

Ответы [ 4 ]

22 голосов
/ 23 февраля 2011

Попробуйте это:

Private mLine As LineElement

Public Property Get Line() As LineElement
    Set Line = mLine
End Property

Public Property Set Line(ByRef vLine As LineElement)
    Set mLine = vLine   'Note the added Set keyword in this line'
End Property
5 голосов
/ 21 октября 2012

Оба свойства должны иметь ключевое слово "Set"

Private mLine As LineElement

Public Property Get Line() As LineElement
    Set Line = mLine 'Set keyword must be present
End Property

Public Property Set Line(vLine As LineElement) ' ByRef is the default in VBA
    Set mLine = vLine 'Set keyword must be present
End Property
1 голос
/ 19 сентября 2017

Попробуйте это

Private mLine As new LineElement

Public Property Get Line() As LineElement
    Set Line = mLine
End Property

Public Property Set Line(ByRef vLine As LineElement)
    Set mLine = vLine
End Property
0 голосов
/ 24 декабря 2016

Оператор Set используется для ссылки объекта на переменную объекта.Вам не нужно использовать ключевое слово Set, если вы имеете дело с простыми и встроенными встроенными типами, такими как integer, double, string и так далее.Здесь вы имеете дело с объектом типа LineElement.

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