
No.1ベストアンサー
- 回答日時:
こんばんは
VBAの場合、たしか、グローバル変数はExcelを閉じるまで解放されないと思いました。
解放がどのような意味なのか少し分からないのですが、
オブジェクト型なら Nothingを代入すればNothingとなりますが
代入しなければ、変数に代入されたオブジェクトは維持されます。
Module1に
Option Explicit
Public buf As Range
Sub test1()
Set buf = Range("A1")
End Sub
Module2に
Option Explicit
Sub test2()
MsgBox buf.Value
Set buf = Nothing
End Sub
test1を実行後 test2を実行
A1セルの値が表示される
続けてもう一度test2を実行すると
91エラー
これは Set buf = Nothing で オブジェクトがNothingになった為
(これを解放と言う場合は解放されたことになります)
Set buf = Nothingを削除またはコメントアウトして
test1を実行後 test2を実行
A1セルの値が表示される
続けてもう一度test2を実行すると
A1セルの値が表示される
つまり、End Subでは buf = Nothingと成らないです
これがプロシージャレベルですとEnd Subでbufの値は消えます
モジュールレベルですと他のモジュールからは使えませんが
End Subでは消えず、オブジェクト型の場合、set buf = Nothingで代入するか閉じるまで、対象のモジュールでは維持されます。
解放と言うキーワードでオブジェクト型としましたが、Public変数は宣言でメモリ確保(予約)されているように思います。
メモリ解放すると言うイメージの場合、プロシージャレベルで宣言する必要があるのでは無いかと思います。
私的なまとめ
宣言セクションで変数宣言すると閉じるまでメモリ確保(予約)されている
プロシージャ内で変数宣言すると実行時のみメモリ確保されEnd Subで解放される。
間違いがあるかも知れませんが、独学趣味レベルの認識です。
違ってたら教えてくださいお願いします。
No.2
- 回答日時:
モジュール内のグローバル変数は、Excelのブックが閉じられないと解放されません。
値を初期化したいなどがあるなら自力で行う必要があります。
クラスやフォーム内のインスタンス変数は、インスタンスを破棄した時点で解放されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
Excelマクロのコードができる方に質問します。
Visual Basic(VBA)
-
何故ただのvariant型と定義された配列はvariant型の配列の引数に代入できないのですか?
Visual Basic(VBA)
-
4
エクセルVBA タイマーを起こす呪文
Visual Basic(VBA)
-
5
Excel VBAのFunctionについて
Visual Basic(VBA)
-
6
【関数orVBA】カーソルのある行を黄色にし、A列の値を別シートに表示できますか?
Visual Basic(VBA)
-
7
オーバーフローを回避する方法?
Visual Basic(VBA)
-
8
VBAの記述方法について教えていただけると幸いです。
Visual Basic(VBA)
-
9
excel2021で実行できないマクロ。どこを直したらいいのか
Visual Basic(VBA)
-
10
ExcelVBAで今開いているユーザ情報を取得できますか?
Visual Basic(VBA)
-
11
配列の書き出しコードについての質問
Visual Basic(VBA)
-
12
揮発性関数の語源・由来は何ですか?
Excel(エクセル)
-
13
連想配列について
Visual Basic(VBA)
-
14
VBA スクロールバーについて
Visual Basic(VBA)
-
15
Excel VABについて 下記記述が『SubまたはFunctionが定義されていません』とエラーメ
Visual Basic(VBA)
-
16
If~ELSE Ifの使い方で
Visual Basic(VBA)
-
17
このコードをどう修正した良いかわかりません
Visual Basic(VBA)
-
18
VBA ユーザーフォーム
Visual Basic(VBA)
-
19
VBAで教えて頂きたいのですが?
Visual Basic(VBA)
-
20
batにて、異なるフォルダの同名ファイルを参照し、文字列を判別。擬似配列で変数へ格納
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
プロシージャまたは関数の引数...
-
5
整数を二つ読み込み、それらの...
-
6
HTML + VBScript で Sleep でき...
-
7
PL/SQLのプロシージャ間でカー...
-
8
【VB6.0】 あるフォームから他...
-
9
プロシージャを呼び出したプロ...
-
10
エクセルのVBAでの7×7の魔方陣...
-
11
ドラゴン曲線を再帰で書く
-
12
他のフォームから別のフォーム...
-
13
C#のループでtextboxに値を入れ...
-
14
ユーザーフォームへのデータ入...
-
15
Functionの戻り値を配列にした...
-
16
アクセスできない保護レベルエ...
-
17
タイムアウトする仕組みを作りたい
-
18
VBA テキストボックスで計算
-
19
パワーポイントのVBAでテキスト...
-
20
xmlの値を配列変数に格納し...
おすすめ情報
公式facebook
公式twitter