※ ChatGPTを利用し、要約された質問です(原文:シートを削除すると、グローバル変数がなくなる)
シート削除時にグローバル変数がなくなる理由
このQ&Aのポイント
シートを削除すると、グローバル変数がなくなってしまう理由を説明します。
シート削除時には、グローバル変数にアクセスできなくなるため、変数の内容が消えてしまいます。
一方で、シートを右クリックして削除するとグローバル変数は保持されます。
以下のようなシートがあります。
<Sheet1>
[データ初期化]ボタン:標準モジュールに記述しているPublic変数を設定
[コピー]ボタン:<Sheet2>をワークシートの末尾にコピーし、シート名を"コピー"に変更
<Sheet2>
[データ表示]ボタン:標準モジュールに記述しているPublic変数を表示
[シート削除]ボタン:<Sheet1>を選択し、<コピー>シートを削除
[シート削除]ボタンマクロは、以下の通り
Private Sub cmdDelete_Click()
On Error Resume Next
Worksheets("Sheet1").Select
Application.DisplayAlerts = False
Worksheets("コピー").Delete
Application.DisplayAlerts = True
End Sub
以下のように実行すると、Public変数の内容がすべてなくなってしまいます。
(1)<Sheet1>の[データ初期化]ボタンを押下
(2)<Sheet1>の[コピー]ボタンを押下
→ワークシートの末尾に<Sheet2>をコピー
(3)<コピー>の[データ表示]ボタンを押下
→Public変数を表示
(4)<コピー>の[シート削除]ボタンを押下
→<コピー>削除
(5)<Sheet1>の[コピー]ボタンを押下
→ワークシートの末尾に<Sheet2>をコピー
(6)<コピー>の[データ表示]ボタンを押下
→Public変数の内容がすべてなくなっている
ただし、(4)で、<コピー>シートタブを右クリックして削除して(5),(6)を実行すると、Public変数がきちんと設定されています。
なぜ、消えてなくなるのかわかりません。
宜しくお願いします。
お礼
わかりずらい説明なのに、回答ありがとうございます。 削除しているシートにプログラムが含まれていれば、プロジェクトのリセットがかかることがわかりました。 これを回避するには、シートにプログラムを書かないことで、プログラムも標準モジュールに書き込んで、それを呼び出す形にすると大丈夫でした。 そのため、ボタンも変更し、「コントロールツールボックス」ツールバーのボタンではなく、「フォーム」ツールバーのボタンに変更しました。 この形であれば、リセットがかからず、Public変数を保持できます。 ありがとうございました。