這很有趣,因爲我從來不知道,你可以有兩個模塊都宣稱具有相同名稱的公共類型。現在我知道,我很震驚。
因此,首先,埃裏克·塔是正確的,你想要把你的類型聲明只有一個模塊中。其他使用此類型的模塊將取決於可用的模塊,但這只是模塊化的一部分。所有軟件開發都需要管理模塊之間的依賴關係。不幸的是,在單個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'聲明的模塊。這並不重要,但你可以發佈代碼嗎?我有興趣在nitpicky這樣的事情...
@anonymous downvoter:照顧解釋?同時downvotes我的兩個[老問題](http://stackoverflow.com/questions/8848027/one-instance-of-report-per-instance-of-simulation-use-a-singleton)...聞起來像狙擊。 – 2012-07-19 20:41:19