Обычный способ сделать это в VBA состоит в том, чтобы A содержал экземпляр B, а также имел интерфейс A, реализующий интерфейс B, а затем делегировал вызовы интерфейса B A внутреннему B.
Это старый материал, но см. Руководство для программиста Visual Studio 6.0:
http://msdn.microsoft.com/en-us/library/aa716285(VS.60).aspx
Существует глава «Много (меж) граней повторного использования кода», которая описывает это соглашение:
http://msdn.microsoft.com/en-us/library/aa240846(v=VS.60).aspx
MS описывает это так:
В дополнение к реализации абстрактных интерфейсов, вы можете повторно использовать свой код, реализуя интерфейс обычногоclass, а затем выборочное делегирование скрытому экземпляру класса.
Это означает, что для реализации наследования требуется множество явных методов делегирования.Есть даже подзаголовок главы: «Разве это не утомительно?».Еще одна причина, по которой ООП в VBA - это PITA (TM) ...
РЕДАКТИРОВАТЬ, ЧТО НЕ УКАЗАН В КОММЕНТАРИИ:
Чтобы ответить на вопрос, который вы задали в своем комментарии,A - это a B. Когда вы делаете A реализующим интерфейс B, вы, по сути, говорите, что можете рассматривать экземпляр A так, как если бы он действительно имел тип B. В VBA способ, которым вы это делаете,объявив переменную типа B, а затем присвоив ей экземпляр A. VBA узнает, что делать, когда вы называете ее как B:
Dim usedAsB as B
Dim anA as A
Set anA = New A
Set usedAsB = anA 'fine since A implements B
usedAsB.something() 'will call B_something() defined in class A
Насколько вы видите в отладкеокно, я не понимаю, почему это так выглядит.А что касается принудительного делегирования, я не уверен, что вы имеете в виду.VBA автоматически отправляет вызовы интерфейса B нужным методам в классе A.Если вы имеете в виду автоматическую генерацию кода для наследования реализации B способом, описанным выше, я не знаю ничего подобного для VBA.Я думаю, что различные «профессиональные» версии VB6 могли бы сделать это, но я никогда не использовал VB6, поэтому я не знаю.