避免命名衝突
當您嘗試建立或使用先前定義的 識別碼 時,就會發生命名衝突。 在某些情況下,命名衝突會產生錯誤,例如 偵測到模棱兩可的名稱 或 目前範圍中的重複宣告。 未偵測到的命名衝突可能會導致程式碼中產生錯誤結果的錯誤,特別是當您未在第一次使用之前明確宣告所有 變數 時。
您可以瞭解 範圍、私用 模組層級和公用模組層級,以避免大部分的命名衝突。
當識別碼下列情況時,可能會發生命名衝突:
- 在一個以上的範圍層級可見。
- 在相同層級有兩個不同的意義。
例如,不同 模組 中的程式可以有相同的名稱。 因此,您可以在名為 和 Mod2
的模組中定義名為 MySub
的 Mod1
程式。 如果每個程式只從它自己的模組中的其他程式呼叫,則不會發生衝突。 不過,如果 MySub
從第三個模組呼叫 ,而且未提供任何資格來區分這兩 MySub
個程式,則可能會發生錯誤。
大部分的命名衝突都可以藉由在每個識別碼前面加上包含模組名稱的限定詞,以及必要時 的專案 名稱來解決。 例如:
YourProject.YourModule.YourSub MyProject.MyModule.MyVar
上述程式碼會呼叫 Sub 程式 YourSub
,並以引數傳遞 MyVar
。 使用任何限定詞組合來區分相同的識別碼。
Visual Basic 會使用相符識別碼的「最接近」宣告,將每個參考比對至識別碼。 例如,如果 MyID
在專案 (和 Mod2
) Mod1
的兩個模組中宣告為Public,您可以在 中指定 MyID
宣告的 Mod2
,而不需從 內 Mod2
進行限定,但您必須將它限定為 Mod2.MyID
,才能在 中 Mod1
指定它。
如果 Mod2
位於不同但直接 參考的專案中,這也成立。 不過,如果 Mod2
是在間接參考的專案中,也就是由您直接參考的專案所參考的專案,則名為 MyID
的變數參考 Mod2
必須一律以專案名稱限定。 如果您從第三個直接參考的模組進行參考 MyID
,則會透過搜尋遇到的第一個宣告進行比對:
您無法在不同的範圍層級重複使用 主應用程式 物件的名稱,例如 Microsoft Excel 中的 R1C1。
提示
命名衝突所造成的一般錯誤包括模棱兩可的名稱、重複的宣告、未宣告的識別碼,以及找不到的程式。 藉由使用 Option Explicit 語句來啟動每個模組,以在使用變數之前強制明確宣告變數,您可以避免一些潛在的命名衝突和識別碼相關的 Bug。
另請參閱
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。