• ベストアンサー

Publicで宣言した時は「End Sub」でマクロが終わっても変数は保存されるのですか?

Public test As Boolean Sub マクロ1() test = True End Sub をステップインでデバッグしながら実行する時に 一番最初はtestにカーソルをあてるとFalseなのですが 一度「End Sub」まで到達しもう一度「Sub マクロ1()」から始めると test = True を通過する前から testにカーソルをあてるとTrueになります。 でもデバッグ中に四角ボタンで停止するとFalseに戻ります。 そもそもBoolean型の規定値はFalseですよね? これはどういうことなのでしょうか? ご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 今まで、そんなことは考えてみたことはありませんが、たぶん、確保した変数が、途中で止めることで、壊れてしまうのだと思いますね。ただ、どこにも、こんな話は書かれていないと思います。あえていうなら、不完全なマクロがあるようなプロジェクトでは、Public 変数は置けないということでしょう。 例えば、このようにしてエラーを発生させても、test の値は確保できません。 '-------------------------------------- '第一テスト Public test As Boolean Sub マクロ1()   Dim a As Long   test = True   a = "A" '←エラーを発生させる End Sub ''End Sub まで、来ないと値を確保できないのです。 '-------------------------------------- '第二テスト Public test As Boolean Sub マクロ1() '1   MsgBox test   test = True End Sub Sub マクロ2() '2   Dim a As Long   test = True   a = "A" '←エラーを発生させる End Sub '1 --> 2 (エラー発生) -->3 で、チェックする。 '-------------------------------------- これで分かるのは、エラーが発生すると、今まで確保した値が飛んでしまうということです。 だから、必ず、On Error トラップで、最低でも、End Sub まで持ってこさせなくてはなりませんが、次の例の場合は、やはり、変数の値は確保できません。 '-------------------------------------- '第三テスト Public test As Boolean Sub マクロ3()   MsgBox test   test = True   Call マクロ4 End Sub Sub マクロ4()   Dim a As Long   On Error GoTo ErrHandler   a = "A" ErrHandler:   If Err.Number > 0 Then    End   End If End Sub 'マクロ3のみ '-------------------------------------- 以下の、コメントブロックして、マクロ3に戻って、End Sub をすれば、値は確保できます。 '  If Err.Number > 0 Then '   End '  End If

dfghhj
質問者

お礼

おお! 私の変わりにいろいろテストしてもらってすいません! 大変参考になりました。 ありがとうございます。

その他の回答 (1)

  • denbee
  • ベストアンサー率28% (192/671)
回答No.1

とりあえず、参考書なりネットなりでPublicの意味をもう一度調べてみてください。 Public宣言とは、変数のスコープがプログラム全体を指します。 従って、マクロ1を完了した後でも、一度設定された値を保持していますから、 再度マクロ1を動かせば、前回保持した値が有効になっていてTrueとなります。 また、デバッグ中に停止するということは、プログラム自体の停止ですから、 変数testもクリアされます。従って、規定値のFalseに戻ります。

dfghhj
質問者

お礼

ちゃんとPublicを調べてみます。 ありがとうございます。

関連するQ&A