2016-01-25 37 views
0

我正在研究一個適度複雜的VBA程序,其中有很多變量需要跟蹤一堆嵌套的子程序。我通過將所有變量(除了在子聲明中聲明的那些變量或dim:ed作爲循環計數器)都聲明爲Public,將所有變量都稱爲「Variables」來完成此操作,所有這些模塊都進行了整齊的分類和評論。是否有任何理由不一次性聲明所有變量?

這一切都很好,代碼運行很快,但事實上,我發現幾乎沒有使用公開/私人的樣本代碼,並且傾向於默認爲Dim,這讓我很懷疑我做錯了什麼。

是否有一個真正的缺點,他們都在一大堆,或者我只是偏執?

+0

來自programmers.stackexchange的一個問題提供了一個很好的答案:http://programmers.stackexchange.com/questions/148108/why-is-global-state-so-evil – Manu

+0

這裏有一大堆術語對我來說都是希臘語,但我認爲我有這個主意。看起來我必須堅持使用Public才能使用模塊之間的變量 - 我不認爲公共和私人之間有任何限制他們在一個項目內的任何東西? –

回答

5

我不是Globals的粉絲。你可以進入國家問題。此外,您不能在全局設置中斷點。

雖然,沒有什麼是一成不變的,因爲每一種情況是不同的,我的建議是:

  1. 模塊,除非該模塊外部訪問聲明潛艇和功能私有。
  2. 在類中,除非需要,否則將所有內容聲明爲私有。在需要公開字段的地方,使用屬性。
  3. 函數和子函數內部聲明例程中的所有內容,而不是全局變量。
  4. 聲明所有參數爲ByVal,除非您有理由傳遞ByRef。

我只在必要時使用全局變量。有時候你需要使用它們,但我必須爲自己辯解。我已經支持許多使用全局變量的工作簿,這些全局變量是在工作表,用戶按鈕等事件處理程序中設置的,可以讓您在調試時頭疼。

希望有所幫助。

相關問題