• ベストアンサー

エクセルのマクロでワークシートチェンジについてお教えください

以前教えていただいたマクロで セルに入力があったら起動するマクロを作っています ・・・Private Sub Worksheet_Change(ByVal Target As Range)・・・ 今回お聞きしたいのは シート上にボタンを作っておいて そのボタンを押すたびに ワークシートチェンジ自体のマクロを発生する、しない を切り替える 方法を教えていただきたいのです  「発生している状態で作業をして  ボタンを押して発生させなくして コピーをして  別のシートに貼り付ける」というようなことをしたいのです  (ワークシートチェンジが発生している状態だと  コピーするための選択ができないので) わかりにくい部分がありましたら 細くさせていただきますのでよろしくお願いいたします

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

こんばんは。 ---------------------------------------------- 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)
回答No.6

こんにちは。 Wendy02さん、貴重な時間を割いてのチェック、感謝します。 いずれはWendy02さんのようにクラスでも何でもサクッと書けるようになりたいと思っています。 これからも宜しくお願いいたします。

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

こんばんは。onlyromさん。 >●Wendy02さん、先日は色々ありがとうございました。 >今回の件ですが、上記のコードでは拙いでしょうか。 そのお書きになったコードのWorksheet_Change側の、いくつか例を想定してみましたが、まったく、問題ないと思いますし、間違いもないと思います。私のものよりも簡単でよいと思いますし、イベント・ドリブン型マクロがエラーなどで、イベントが死んでしまっても、そのボタンで、イベントが復活しますね。

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

こんばんは。 たぶん、おっしゃっているのは、以下のようなマクロだろうと思います。 コントロールツール・ボタンは、トグルになっています。イベントが掛かっているときは、「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 '----------------------------------

回答No.2

EnableEvents プロパティでイベント発生を操作できます。 ボタンではなくコピー処理のプロシージャに盛り込んだ方がスッキリすると思います。 (例) Public Sub MyCopy()   Application.EnableEvents = False   'ここにコピー処理を記述してください。   Application.EnableEvents = True End Sub

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

コントロールチェックボックスの CheckBox をシートにおいて、Change イベントを下記にようにしては如何でしょう? Private Sub Worksheet_Change(ByVal Target As Range)  If Me.CheckBox1.Value Then    MsgBox "Change"  End If End Sub

関連するQ&A