Установить свойство класса vba с ссылкой на объект
У меня есть модуль класса с именем 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 )
Я получаю ошибку "Объект не поддерживает это свойство или метод". Что именно я делаю неправильно в обоих случаях?
Ответы
Ответ 1
Попробуйте следующее:
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
Ответ 2
Оба свойства должны иметь ключевое слово "Установить"
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
Ответ 3
Оператор Set используется для создания ссылки объекта на переменную объекта. Вам не нужно использовать ключевое слово Set, если вы имеете дело с примитивными и встроенными встроенными типами, такими как integer, double, string и т.д. Здесь вы имеете дело с объектом типа LineElement.
Ответ 4
Попробуйте это
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