Это интересно, потому что я никогда не знал, что у вас может быть два модуля, объявляющих открытый тип с одинаковым именем.Теперь, когда я знаю, я в ужасе.
Итак, во-первых, Эрик Тауэрс прав, что вы хотите поместить объявление Type только в один модуль.Другие модули, которые используют этот тип, будут зависеть от того, доступен ли этот модуль, но это только то, что поставляется с модульностью.Необходимость управления зависимостями между модулями является общей для всей разработки программного обеспечения.К сожалению, в рамках одного проекта VBA (например, типа, который вы найдете в одной книге Excel) единственным вариантом управления зависимостями модулей является ручной.(В VBA «модули» на самом деле являются «файлами исходного кода». Другие языки / среды имеют различные системы упаковки более высокого уровня.)
Теперь для ужасающей части.Если вы объявляете типы с одинаковыми именами в разных модулях, вы настраиваете себя на проблемы.Рассмотрим два модуля VBA:
'Module1
Public Type typ
x As String
End Type
Public Sub useTyp()
Dim t As typ
t.x = 42
Debug.Print t.x + t.x
End Sub
и
'Module2
Public Type typ
x As Long
End Type
Public Sub useTyp()
Dim t As typ
t.x = 42
Debug.Print t.x + t.x
End Sub
в одном проекте, ваш код будет «компилироваться» (по крайней мере, в Excel VBA).Но два саба 'useTyp' дают разный результат.Хуже того, если вы удалите одно из объявлений Type из одного из модулей, вы внезапно изменили поведение подпрограммы 'useTyp' в том же модуле!Такая двусмысленность никогда не желательна.
В действительности VBA создает два разных типа: Module1.typ и Module2.typ.Когда вы находитесь в том же модуле и не определяете имя типа, VBA молча находит «правильный» тип и использует его.
Я немного удивлен, узнав, что вы передаете экземплярыодного XYpointType для модулей, которые имеют другое объявление XYpointType.Это не так важно, но не могли бы вы опубликовать код?Я заинтересован в таких придирчивых вещах ...