2013-02-03 104 views
0

我有幾個關於如何在Excel VBA中使用全局變量的問題。excel vba全局變量和併發性

所以我的應用程序使用由第三方提供的API對象。目前在所有的功能,我們初始化該對象,並使用它:

function() 
    Dim api as someApi 
    api.dosth 

end function 

我只是想知道,而不是對其進行初始化每一次,我能不能使它成爲一個全局變量?就像在開始時聲明它並在workbook_open函數中初始化它一樣?如果多個函數同時運行並試圖使用這個共享的api對象,會不會是一個問題?也只是關於全局變量的一般問題:所有模塊是否共享變量?或者每個模塊只能看到在自己的代碼中聲明的全局變量?例如,如果我在同一工作簿中有模塊a和模塊b,並且api對象在模塊a中聲明並在workbook_open事件中初始化,那麼模塊b中的功能是否可以使用它?

非常感謝!

+0

請參閱這裏瞭解變量作用域如何在VBA中工作http://support.microsoft.com/kb/141693。基本上,是的,你可以聲明一個公共變量來保存你的對象。根據該對象是否具有「狀態」以及您的各種例程如何使用它,它應該可以正常工作。請注意,在VBA中沒有真正的「併發」 - 只有一個函數/子在同一時間運行。 –

+0

如果您感覺功能正常,另一種方法是將對象作爲參數傳遞給需要使用它的任何函數/子。 –

回答

0

根據API的用法,它可以初始化一次並在任何地方使用。

我建議讀一下全局/公共/私有變量。

基本上聲明一個變量作爲函數在函數之外意味着該變量只能在該模塊內訪問。聲明爲公共,意味着可以通過該工作簿訪問所有模塊。聲明爲全局意味着可以在該Excel實例中的所有工作簿中訪問它。

如果你只想用一個工作簿訪問API,我建議創建一個公共變量並在工作簿打開時對其進行初始化,確保在工作簿關閉時正確關閉/終止任何變量。