- ベストアンサー
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ですよね? これはどういうことなのでしょうか? ご教授よろしくお願いします。
- みんなの回答 (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
その他の回答 (1)
- denbee
- ベストアンサー率28% (192/671)
とりあえず、参考書なりネットなりでPublicの意味をもう一度調べてみてください。 Public宣言とは、変数のスコープがプログラム全体を指します。 従って、マクロ1を完了した後でも、一度設定された値を保持していますから、 再度マクロ1を動かせば、前回保持した値が有効になっていてTrueとなります。 また、デバッグ中に停止するということは、プログラム自体の停止ですから、 変数testもクリアされます。従って、規定値のFalseに戻ります。
お礼
ちゃんとPublicを調べてみます。 ありがとうございます。
お礼
おお! 私の変わりにいろいろテストしてもらってすいません! 大変参考になりました。 ありがとうございます。