Скажите, что у вас есть этот код в модуле с именем Module1
:
Option Explicit
Private Type TSomething
Foo As Integer
Bar As Integer
End Type
Public Something As TSomething
В эквивалентном С# -коде, если вы сделали поле Something
public
, код больше не будет компилироваться из-за несогласованной доступности - тип поля менее доступен, чем само поле. Что имеет смысл.
Однако в VBA вы можете иметь этот код в Module2
:
Sub DoSomething()
Module1.Something.Bar = 42
Debug.Print Module1.Something.Bar
End Sub
И вы получаете IntelliSense при вводе его, и он компилируется, и он запускается, и он выводит 42
.
Почему? Как это работает, с точки зрения COM? Является ли это частью спецификации языка?