Контекст
У меня есть родительский интерфейс, IParent
,
Option Explicit
Public Sub DoParentStuff()
End Sub
дочерний интерфейс, реализующий IParent
, IChild
,
Option Explicit
Implements IParent
Private Sub IParent_DoParentStuff()
End Sub
Public Sub DoParentStuff()
End Sub
и конкретная реализация IChild
, CStandardChild
.
Option Explicit
Implements IChild
Private Sub IChild_DoParentStuff()
End Sub
Public Sub DoParentStuff()
IChild_DoParentStuff
End Sub
Затем я создал модуль, который передает переменную типа IChild
подпрограмме с одним параметром типа IParent
.
Option Explicit
Private Sub Test(ByRef parent As IParent)
parent.DoParentStuff
End Sub
Public Sub Main()
Dim child As IChild
Set child = New CStandardChild
Test child
End Sub
Я могу скомпилировать проект VBA без ошибок. Но когда я запускаю Main
, я получаю ошибку времени выполнения
Ошибка выполнения «13»:
Несоответствие типов
Отладчик указывает на код Test child
.
Вопрос
Почему во время выполнения я получаю ошибку несоответствия типов? Как я могу передать child
в Test()
, не получая этой ошибки?
Что я пробовал
Я изучал приведение IChild
к IParent
. Однако я не использую VB.NET
, поэтому у меня нет доступа к DirectCast
и CType
. Говоря это, если я правильно реализовал IParent
и IChild
, я не думаю, что приведение необходимо.
IParent
в VBA? Просто объявитеDim foo As IParent: Set foo = child
- person Comintern   schedule 13.11.2018child
вTest()
, не получая ошибкиType mismatch
. Тем не менее, ваш комментарий может быть способом сделать это, я попробую, спасибо. - person Joshua Daly   schedule 13.11.2018