我有一個表格,其中有一個名為“VigilTable”的變數。此變數從呼叫字串 OpenArgs 屬性中獲取其值。
除其他外,我在打開其他表單時在呼叫字串中使用此變數。
但它只適用于第一次通話。
呼叫之前的 MsgBox VigilTable 將始終在第一次呼叫時顯示“Spring2022”或其他任何內容,但在隨后的呼叫中始終顯示為空白(當被呼叫表單嘗試從 OpenArgs 中提取值時,我得到“無效使用 NULL”)。該變數在表單的 VBA 代碼的“常規”部分中變暗為字串。
那么這里發生了什么?我可以修復它嗎?
謝謝。
uj5u.com熱心網友回復:
好的,所以你為給定的表單在表單級別(代碼模塊)定義了一個變數。
我們假設在表單加載時,您將此變數設定為表單加載時表單的 OpenArgs。
所以,這樣說:
Option Compare Database
Option Explicit
Public MyTest As String
Private Sub Form_Load()
MyTest = Me.OpenArgs
End Sub
好吧,我不能說有一個變數有多大幫助,因為這種形式的任何和所有代碼都可以使用 me.OpenArgs。
但是,請記住以下幾點:
只有表單中的 VBA 代碼可以自由使用該變數。它對應用程式來說不是全域的,而只是給定形式的代碼。
但是,表單之外的其他 VBA 代碼實際上可以使用此變數。但只要表格是打開的。
所以,在表單代碼中,你可以去;
MsgBox MyTest
但是,對于表單之外的 VBA,您可以像這樣使用該值:
Msgbox forms!cityTest.MyTest
但是,請記住,任何未處理的錯誤都會(并且確實)破壞所有全域和區域變數。所以,也許你有一個未處理的錯誤。
當然,如果您編譯(和部署)已編譯的 accDB->accDE,那么任何錯誤都不會重新設定這些區域和全域變數。
但是,在大多數情況下,該“值”應該只在表單打開的情況下持續存在,并且如果您關閉該表單,那么該表單的值和變數當然會超出范圍(不存在)。
現在,您可以考慮將變數宣告移動到標準代碼模塊中,然后它實際上是全域性的,但在大多數情況下,不推薦這樣的代碼,因為它很難除錯,而且這樣的代碼不是很模塊化,甚至隨著時間的推移易于維護。
因此,這表明 VBA 代碼中發生了一些錯誤,當這種錯誤發生時,所有這些變數都會被重新設定(但是,值得注意的例外是,如果你編譯成 accDE - 并且所有變數都將因此持續存在- 甚至在遇到 VBA 錯誤時保留它們的值。
uj5u.com熱心網友回復:
對于字串變數,不受任何錯誤影響的更強大的解決方案應該是寫入/讀取注冊表。您可以使用任何能夠讀取注冊表的作業簿/應用程式中的變數(來自注冊表的字串)。
- 在標準模塊
Public之上宣告一些常量(在宣告區域):
Public Const MyApp As String = "ExcelVar"
Public Const Sett As String = "Settings"
Public Const VigilTable As String = "VT"
- 然后,從任何模塊/表單中保存變數值:
SaveSetting MyApp, Sett, VigilTable , "Spring2022" 'Save the string in Regisgtry
- 可以通過以下方式閱讀:
Dim myVal as String
myVal = GetSetting(MyApp, Sett, VigilTable , "No value") 'read the Registry
If myVal = "No value" Then MsgBox "Nothing recorded in Registry, yet": Exit Sub
Debug.print myVal
uj5u.com熱心網友回復:
實際上,事實證明這根本不是答案。
有人建議我在標準模塊中將變數宣告為常量,但我將它們宣告為變數。起初它似乎作業,至少在整個會話中,然后它停止作業,我不知道為什么。
如果我改為宣告為常量,我仍然可以隨意更改它們嗎?這很重要,因為我在不同的時間以不同的值重復使用它們。
我沒有做常量,而是在標準模塊中宣告 VigilName 并洗掉它的所有其他宣告解決了這兩個問題。
當我這樣做時,我宣告了其他幾個通常使用的變數,并洗掉了它們的所有其他宣告,以便至少它們將在整個程序中始終如一地使用(以后可能會為我節省一些故障排除。
謝謝大家!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/460160.html
上一篇:我收到UnhandledException:FormatException:Unexpectedendofinput(atcharacter1)并且不知道為什么?
