2016-11-04 118 views
0

關於內存使用的快速問題,因爲我想始終以最佳方式編寫我的代碼。我環顧四周,但沒有完全發現我的問題。VBA內存使用:在不同的subs中聲明相同的變量vs在公共模塊中聲明相同的變量

我在工作簿中有幾個工作表,我通常在創建新的excel/vba項目時創建這些工作表。這些可能是諸如「圖書館」和「數據」之類的東西。在每個子的開始處,我將聲明:

Dim libWS as Worksheet 
Dim dataWS as Worksheet 
Set libWS = Worksheets("LIBARARY") 
Set dataWS = Worksheets("DATA") 

我會爲每個使用這些工作表的子部分執行此操作。我的問題是,在模塊中公開聲明這些工作表並使用工作簿打開宏來初始化它們會更加優化還是相同?

模塊1:

public libWS as Worksheet 
public dataWS as Worksheet 

此工作簿:

Private Sub Workbook_Open() 
    Set libWS = Worksheets("LIBARARY") 
    Set dataWS = Worksheets("DATA") 
End Sub 

在速度/存儲器使用方面優化的含義。

感謝

+0

我認爲問題是更好的服務在代碼審查。嘗試發佈您的完整代碼以獲得良好迴應。 –

+0

我不會那樣做,至少有幾個原因:(1)全局變量! (2)如果一個未處理的錯誤最終導致您的VB項目重置,您的全局變量將被擦除,您的代碼將被其他代碼炸燬。也許相反,創建一個函數返回一個「設置」對象(每個表單都有字段),並在每次需要處理常用項時調用它。或者在VBProject中更改工作表對象的代碼名稱,然後您可以將它們稱爲(例如)'libWS',而無需聲明它們或將它們設置爲任何內容。取決於您的牀單的靜態。 –

+0

謝謝你的評論。我不知道有一個代碼審查部分。我將在未來利用這一點 – Citanaf

回答

2

我覺得這兩個選項是不必要的,你可以直接引用工作表中的Excel對象模型對象。如果重命名的對象(而不是工作表的名稱),以DATALIBRARY

enter image description here

然後你可以參考他們在這樣的代碼:

enter image description here

+0

羅賓,非常感謝您的回答。我不知道你可以重命名這些對象並在子例程中使用它們。這會讓我的生活變得更輕鬆! 我希望擺脫這個討論的一個側面問題是關於內存使用情況,我不認爲這個問題是完全可以回答的。也許你可以幫助..鑑於我是用每個子工具「libWS作爲Worksheet/Set libWS = Worksheets(」LIBRARY「)來聲明這些工作表,那些聲明是否像自己的工作表一樣消耗內存?可以說我擁有那些說5次,這將相當於有5增加表? – Citanaf

+0

一個表變量只是一個指向對象本身的指針 - 它不會創建一個表「複製」 –

+0

@Citanaf - 根據蒂姆說你的方法會因爲你爲它聲明瞭一個變量,所以沒有在實際工作表中使用等價的內存,變量本身需要少量內存,並且它指向你的工作表對象 –

相關問題