
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)
-
全ての変数を一気にリセットする方法はありますか?
PowerPoint(パワーポイント)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
UserForm1.Showでエラーになります。
工学
-
5
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
6
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
7
VBA 1次元配列を2次元に追加する
Visual Basic(VBA)
-
8
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
9
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
10
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
11
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
12
動的配列が存在(要素が有る)か否かを判定できますか?
Visual Basic(VBA)
-
13
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
14
【Excel VBA】 WorksheetやRangeオブジェクトとして宣言した変数の開放は必要でしょうか?
その他(Microsoft Office)
-
15
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
16
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
17
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
18
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
-
19
EXCELのVBAで作業ファイルを閉じてもメモリの解放をしなくて困っています
Excel(エクセル)
-
20
エクセルVBAではRounddown関数はつかえないのでしょうか?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GetNextWindowがDLLファイルUse...
-
VBA public変数はどのようなこ...
-
visual basic初心者です。 visu...
-
VBAでcallで呼び出したsubを終...
-
他のフォームから別のフォーム...
-
SavePictureで保存できない
-
VBAで入力数値について
-
VB2010からPROCEDUREを実行でエ...
-
コンボボックスからテキストボ...
-
レコードセットにnullの場合
-
VB2010 シリアル通信の文字列...
-
【VBS】クリップボード操作につ...
-
リストビューの列ヘッダーの幅...
-
[VB6] SQLの作成について
-
sublimit textっていうエディタ...
-
subsequentとnextの違いってな...
-
PL/SQLのプロシージャ間でカー...
-
三項でたとえば交換って
-
VB.NET)コンボボックスの連動に...
-
ボールの動きがスムーズに動い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA public変数はどのようなこ...
-
GetNextWindowがDLLファイルUse...
-
演奏記号の・・・・
-
Excel VBA: private sub 内の...
-
pthread_cond_waitとptherad_co...
-
VB6.0の正規表現を使って、文字...
-
日付の取得VB.NET.では
-
教えて VBA(チェックボックス...
-
再帰呼び出し
-
フォルダ内にさらにフォルダが...
-
エクセルVBAでテキストボッ...
-
他のフォームから別のフォーム...
-
レコードセットにnullの場合
-
VBAで入力数値について
-
VBAでcallで呼び出したsubを終...
-
チェックボックスを操作できな...
-
C#のループでtextboxに値を入れ...
-
【VB6.0】 あるフォームから他...
-
アクセスできない保護レベルエ...
-
VB.NETでのイベントの途中終了
おすすめ情報