我有一個Access 2003數據庫,它將動態加載MDB數據庫作爲庫引用。原因是這個數據庫是60多個應用程序數據庫的菜單前端。與其處理永久引用所有這些數據庫,菜單前端將動態引用用戶進行選擇時所需的內容。我正在將此數據庫移到Access 2010並創建自定義功能區。當色帶加載時,我開始使用here中的技術捕獲全局變量中的色帶對象。然後我遇到了問題,我可以驗證代碼是否正在運行,並且全局變量正確地分配了功能區引用,但是在數據庫運行完啓動例程後,該全局變量將重置爲Nothing。如何在動態加載參考後保存全局變量值?
爲了驗證發生了什麼,我創建了一個簡單的數據庫進行測試。在這個數據庫中,我有一個全局變量模塊:
Public obj as Object
我再有這樣的功能:
Public Function SetObj()
Set obj = Application
Debug.Print "IsNothing=" & (obj Is Nothing)
References.AddFromFile "Test.mdb"
Debug.Print "IsNothing=" & (obj Is Nothing)
End Function
顯然,在我的代碼,「Test.mdb的」是指實際文件。如果我運行這段代碼,Debug.Print爲兩個實例提供了「IsNothing = False」,但是在函數完成後,如果等待幾秒鐘,Debug.Print會給我「IsNothing = True」。如果我註釋掉References.AddFromFile,無論等待多久,Debug.Print都會給我「IsNothing = False」。
對我來說這是有道理的,因爲Access加載庫後必須重新編譯VBA代碼,所有全局變量都被重置。我已經嘗試將全局變量移動到一個類中,但是因爲我需要一個全局變量,所以類變量會被重置。我嘗試在函數中使用局部變量來保存全局變量的值,但它看起來像Access在代碼運行完幾秒後等待重新編譯,所以這也不起作用。有沒有人有任何其他想法來實現這一點?
我相信它更加用戶友好,併爲「無縫」體驗做出了貢獻。它還使數據庫之間共享信息變得更加容易。例如,我有一個報告表單,可以從任何數據庫運行任何報告。如果數據庫位於單獨的實例中,則無法從「報告」窗體中看到選擇。我現在的目標是在Access 2010中處理自定義功能區。由於不再可以使用CommandBars(謝謝,Microsoft!),並且沒有獲得Ribbon引用的編程方式,我需要將Ribbon對象保存在全局變量中。 – TheOtherTimDuncan