Свойство Sub в модуле класса VBA Excel с использованием интерфейса - PullRequest
0 голосов
/ 01 апреля 2020

Я попытался адаптировать решение, указанное в Свойство Sub в модуле класса VBA Excel , но cTask основано на интерфейсе. Но что бы я ни делал, я получаю разные ошибки. (Я новичок в Интерфейсах, поэтому, может быть, я просто пока не все понял.)

Например, когда cMile.cls остается неизменным, добавляя ITask.cls

Option Explicit

Public Property Get Mile() As cMile
End Property

Public Property Set Mile(Value As cMile)
End Property

и меняя * От 1011 * до

Option Explicit
Implements ITask

Private pMile As cMile

Private Property Get ITask_Mile() As cMile
    Set ITask_Mile = pMile
End Property

Private Property Set ITask_Mile(Value As cMile)
    Set pMile = Value
End Property

Private Sub Class_Initialize()
    Set Me.Mile = New cMile
End Sub

выдает ошибку компилятора «Метод или объект данных не найден» (или аналогичный; перевод с немецкого). Изменение Set Me.Mile = New cMile на Set Me.Mile = New ITask_cMile также не сработало (но я также не думал, что это сработает).

Что я делаю неправильно или чего мне не хватает?

1 Ответ

1 голос
/ 01 апреля 2020

Я думаю, что так и должно быть:
Вам нужно объявить переменную Task как интерфейс, а затем Set это новый класс cTask.

Модуль

Option Explicit

Sub Tester()
    Dim Task As ITask
    Set Task = New cTask

    Task.Mile.Status = "Done"
    Task.Mile.Number = 11

    Debug.Print Task.Mile.Status, Task.Mile.Number
End Sub

cTask.cls

Option Explicit
Implements ITask

Private pMile As cMile

Private Property Get ITask_Mile() As cMile
    Set ITask_Mile = pMile
End Property

Private Property Set ITask_Mile(Value As cMile)
    Set pMile = Value
End Property

Private Sub Class_Initialize()
    Set pMile = New cMile
    'Set ITask_Mile = New cMile 'works too
End Sub

ITask

Option Explicit

Public Property Get Mile() As cMile
End Property

Public Property Set Mile(Value As cMile)
End Property

cMile

без изменений

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