プロが教えるわが家の防犯対策術!

よろしくお願いします。昨年はgooの皆さんに大変お世話になりました
お陰様でマクロもエクセルも大いに進歩できました
今年もよろしくお願いします

質問です
Private Sub Workbook_open()で、マクロが止まってしまいます
原因は
'***********************

'***********************
で、はさまれた部分にあるようです(REM文にするとマクロは止まりません)
なぜマクロが止まってしまうのでしょうか?
どなたか教えてください

Private Sub Workbook_open()
'実行順序はWorkbook_open()がauto_openより先
With Sheets("T60012")
'エクセルopen時に前回close時のデータは全部クリアー(終わったことだから比較は意味がない)
.Range("AP42:AP62").ClearContents '管理上限オーバー 旧温度クリアー
.Range("BA42:BA62").ClearContents '管理下限アンダー 旧温度クリアー
.Range("CE42:CE62").ClearContents 'OK NOの文字 デフォルトは空白
'****************************
Application.EnableEvents = True
Application.Speech.Speak "ボリュームチェック、ボリュームチェック", True
Application.EnableEvents = False
'****************************

End With
End Sub

質問者からの補足コメント

  • win 8.1でエクセルは2013です

      補足日時:2016/01/10 01:44

A 回答 (1件)

こんにちは!



>Application.EnableEvents
のTRUEとFALSEが逆なのでは?

お示しのコードでは「イベントを止める」で終わっていますので
そこでマクロそのものが止まってしまうと思います。

あくまで個人的見解ですが
今回のコードでは
>Application.EnableEvents = False

>Application.EnableEvents = True
の2行は不要な気がします。
(検証はしていません)

一般的にはChangeイベントなどで無限ループに陥るのを防ぐ場合、
この使い方をすることが多いと思います。

※ 万一エラーでマクロが止まったのであれば
Application.EnableEvents = True
の1行だけの別マクロで戻してあげないと
お示しのプロシージャそのものがうんともすんとも言わなくなるのでは?
(これも未検証なので無意味だったらごめんなさい)m(_ _)m
    • good
    • 1
この回答へのお礼

助かりました

tom04さん
おはようございます。いつもお世話になっております
早朝から回答いただけて助かりました

ご指摘の2行を削除したらマクロが止まらなくなりました

私は、「Application.Speech.Speak の前後には無条件で書かないといけない(おまじないのようなもの)」と勝手に思っていました
やっと解決できました。ありがとうございました。

また、先日の質問の件ですが、私の
Private Sub Worksheet_Calculate()をあえて使う理由の説明が
不十分で、tom04さんに迷惑をおかけしました
お詫びします

ありがとうございました

お礼日時:2016/01/10 09:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!