Board logo

標題: public 變量的值可以維持多久? [打印本頁]

作者: mhl9mhl9    時間: 2018-8-17 21:25     標題: public 變量的值可以維持多久?

標準模組宣告public X,標準模組一個巨集"Macro1"里給X賦值X=123.
就是不知道,x=123這個值,維持到什麼時候呢?
作者: mhl9mhl9    時間: 2018-8-17 22:56

標準模組宣告public X,標準模組一個巨集"Macro1"里給X賦值X=123.
就是不知道,x=123這個值,維持到什麼時候呢 ...
mhl9mhl9 發表於 2018-8-17 21:25

我為什麼會發問這個奇怪的問題?公用變數"public X"和局部變數"static X",只要不關閉這個文件,X會始終保持它的值.
但我測試多次偶然,X="",測試結果是:工作簿里任何程序出錯,你選擇"退出程序",導致X="".
有問各位大大,我的理解對不對?
作者: jackyq    時間: 2018-8-17 22:59

任何觸使 VBA Code 重新被編譯的動作 , x 值就會消失

或 檔案被關閉
作者: jackyq    時間: 2018-8-17 23:03

回復 2# mhl9mhl9
yes
作者: mhl9mhl9    時間: 2018-8-17 23:36

標準模組宣告public X,標準模組一個巨集"Macro1"里給X賦值X=123.
就是不知道,x=123這個值,維持到什麼時候呢 ...
mhl9mhl9 發表於 2018-8-17 21:25

我為什麼會發問這個奇怪的問題?公用變數"public X"和局部變數"static X",只要不關閉這個文件,X會始終保持它的值.
但我測試多次偶然,X="",測試結果是:工作簿里任何程序出錯,你選擇"退出程序",導致X="".
有問各位大大,我的理解對不對?
做文件,常常會需要某個變量維持一個固定的值,如 public X,又如static X,又如property get X,一旦X被賦值,文件不關閉,X值始終會保持.
但有例外,就是文件里任何程式出錯,你又沒有處理"除錯",結果上述變量X就變成"空值",導致需要X值的程序都報錯!
我現在想到的解決方法(1)用on error goto linex,讓程式跳過錯誤就end sub,這樣做X值會保持(2)在on error goto linex後面重新給X賦值.
有問各位大大,我的理解對不對?
文件做了不少,上述情況今天才發覺,難怪文件莫名其妙報錯,原來原因之一就在這兒.
作者: GBKEE    時間: 2018-8-18 08:21

回復 5# mhl9mhl9

測試多次偶然,X="",測試結果是:工作簿里任何程序出錯,你選擇"退出程序",導致X="".

   附上檔案看看程式碼.
可試試定義名稱,檔案關閉後指定的值還是存在.
  1. Option Explicit
  2. Private Sub Workbook_Open()
  3.     Dim N, Msg As Boolean
  4.     For Each N In Names
  5.         If N.Name = "Gbkee" Then Msg = True: Exit For
  6.     Next
  7.     If Msg = False Then Names.Add "Gbkee", Date, False
  8.     EX
  9. End Sub
  10. Sub EX()
  11.     MsgBox CDate([gbkee])
  12. End Sub
複製代碼

作者: Scott090    時間: 2018-8-19 06:27

回復 5# mhl9mhl9


    我用過2種方式去給一個需要保存賦值的變數:
1. 如 GBKEE大大 的方式 設定定義名稱
2. 既然是在 EXCEL 內使用,就在可能不會用到的遠處儲存格記起來
作者: stillfish00    時間: 2018-8-20 16:59

本帖最後由 stillfish00 於 2018-8-20 17:05 編輯

回復 2# mhl9mhl9
static 是靜態變數,跟局部變數又是不一樣的。

公用變數Public X 的值設定後會維持到甚麼時候?
就我所知除了關閉excel外,下面任一種都會將公用變數清除:
1. code 中有執行到  End
2. 按了重新設定這按鈕
    [attach]29241[/attach]
3. 偵測到錯誤時按了結束
    [attach]29243[/attach]

除了定義名稱,若你要賦予變數的值是不需要改變的,可以改用常數
如 Public Const X=123




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)