- ベストアンサー
エクセルのマクロでワークシートチェンジについてお教えください
以前教えていただいたマクロで セルに入力があったら起動するマクロを作っています ・・・Private Sub Worksheet_Change(ByVal Target As Range)・・・ 今回お聞きしたいのは シート上にボタンを作っておいて そのボタンを押すたびに ワークシートチェンジ自体のマクロを発生する、しない を切り替える 方法を教えていただきたいのです 「発生している状態で作業をして ボタンを押して発生させなくして コピーをして 別のシートに貼り付ける」というようなことをしたいのです (ワークシートチェンジが発生している状態だと コピーするための選択ができないので) わかりにくい部分がありましたら 細くさせていただきますのでよろしくお願いいたします
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 ---------------------------------------------- Private Sub CommandButton1_Click() Application.EnableEvents = Not Application.EnableEvents If Application.EnableEvents Then CommandButton1.Caption = "Event ON" Else CommandButton1.Caption = "Event OFF" End If End Sub ----------------------------------------- IF文以下5行は必ずしも必要ありません。 ●Wendy02さん、先日は色々ありがとうございました。 今回の件ですが、上記のコードでは拙いでしょうか。
その他の回答 (5)
- onlyrom
- ベストアンサー率59% (228/384)
こんにちは。 Wendy02さん、貴重な時間を割いてのチェック、感謝します。 いずれはWendy02さんのようにクラスでも何でもサクッと書けるようになりたいと思っています。 これからも宜しくお願いいたします。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。onlyromさん。 >●Wendy02さん、先日は色々ありがとうございました。 >今回の件ですが、上記のコードでは拙いでしょうか。 そのお書きになったコードのWorksheet_Change側の、いくつか例を想定してみましたが、まったく、問題ないと思いますし、間違いもないと思います。私のものよりも簡単でよいと思いますし、イベント・ドリブン型マクロがエラーなどで、イベントが死んでしまっても、そのボタンで、イベントが復活しますね。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 たぶん、おっしゃっているのは、以下のようなマクロだろうと思います。 コントロールツール・ボタンは、トグルになっています。イベントが掛かっているときは、「ON」が出ていて、イベントが掛からない場合は、「Off」が表示されます。これは、イベント・ドリブン型のマクロのインスタンスをなくしてしまいます。私が、よく使うイベント・ドリブン型マクロです。 また、他には、#IF ステートメントで、マクロ全体を分岐させる方法がありますが、それはやむを得ない状況の時に限ります。 '---------------------------------- 'シートモジュール Private Sub CommandButton1_Click() Static flg As Boolean flg = Not flg Call EventsOnOff(flg) CommandButton1.Caption = Choose(CInt(flg) + 2, "ON", "OFF") End Sub '---------------------------------- '標準モジュール Dim myClass As New Class1 Sub EventsOnOff(flg As Boolean) If flg Then Set myClass.mySh = ActiveSheet Else Set myClass.mySh = Nothing End If End Sub '---------------------------------- 'クラスモジュール (Class1) Public WithEvents mySh As Worksheet Private Sub mySh_Change(ByVal Target As Range) MsgBox Time End Sub '----------------------------------
- GreatDragon
- ベストアンサー率46% (186/402)
EnableEvents プロパティでイベント発生を操作できます。 ボタンではなくコピー処理のプロシージャに盛り込んだ方がスッキリすると思います。 (例) Public Sub MyCopy() Application.EnableEvents = False 'ここにコピー処理を記述してください。 Application.EnableEvents = True End Sub
- papayuka
- ベストアンサー率45% (1388/3066)
コントロールチェックボックスの CheckBox をシートにおいて、Change イベントを下記にようにしては如何でしょう? Private Sub Worksheet_Change(ByVal Target As Range) If Me.CheckBox1.Value Then MsgBox "Change" End If End Sub