我在VBA中使用腳本字典在Excel 2010中保存1,840,000個鍵和值對。我想聲明並填充它們一次,然後在我的模塊和函數中使用它們。在內存中保留腳本字典VBA
對於初學者,我宣佈口譯是公開的,使用Public dict As Scripting.Dictionary
,然後我將它填充到worksheet_activate()
。我如何保存並在其他mod中使用它?
謝謝
我在VBA中使用腳本字典在Excel 2010中保存1,840,000個鍵和值對。我想聲明並填充它們一次,然後在我的模塊和函數中使用它們。在內存中保留腳本字典VBA
對於初學者,我宣佈口譯是公開的,使用Public dict As Scripting.Dictionary
,然後我將它填充到worksheet_activate()
。我如何保存並在其他mod中使用它?
謝謝
作爲一個良好的編程習慣,在吸氣功能包這樣的變量,並隱藏全局變量作爲本地裏面靜態。首次使用時填充它。
爲了做到這一點,寫一個標準模塊中此功能:
Public Function getMyDictionary() as Scripting.Dictionay
Static dict as Dictionary ' static: will keep state across different calls
If dict Is Nothing Then
Set dict = new Scripting.Dictionary
''''''''''''''''''''
dict.Add "foo", "bar"
' etc...
' Code to populate dictionary
'
''''''''''''''''''''
End If
Set getMyDictionary = dict
End Function
現在只要您需要引用字典,只要是這樣的:
If getMyDictionary.Exists("foo") Then doStuff
這個成語有很多優點:
字典在首次使用時填充。如果在Excel會話期間不需要,它將不會被填充。
你不再需要擔心「我什麼時候填寫我的字典」。這將是可用的和填充隨時隨地需要
,如果該項目因一些運行時錯誤卸載,所有的全局變量都被複位。特別是,對象重置爲Nothing
。包裝函數正確處理情況並以透明方式重新填充字典。
TLDR ...全局字典是隱藏的,對它的訪問(在某種程度上)是受控的。 「在某種程度上」,因爲其他代碼仍然可以操作它(插入,刪除...)。如果一個人需要通過更多的控制權,例如允許其他代碼爲只讀它,然後把它安排在類模塊僅暴露允許的功能的私有成員......
模塊中的任何公共正如Ash所說的,要麼將它作爲子/功能的論據。好的東西是不會丟失字典在休息/錯誤... –
@ A.S.H我命名公共子「workbook_activate()」,它並沒有運行時,工作簿打開。然而,當我使用「worksheet_activate()」時,只要我的mod仍在該sheet/mod文件中,它就很棒。一旦離開,字典中的值就會被清除。 – wizlog
@PatrickLepelletier你是否暗示字典通常會擦除錯誤? – wizlog