てぃーだブログ › S・M・C (Simple.Macro.Create) ~エクセルマクロ日記~ › VBA › エクセルマクロ(VBA):ワークシートイベントを無効にする。

2009年07月16日

エクセルマクロ(VBA):ワークシートイベントを無効にする。

エクセルマクロには、イベントという便利な機能があります。

このセルでダブルクリックすると他の表に飛んでほしいとか
このセルの内容を変えると、自動計算してほしいとか、
そんな要望に応える為、準備された機能です。

でも、そんな便利なイベントでも、処理によっては発生(起動)
させたくない時もあります。

例えば、セルの内容を変更したと同時に自動計算するマクロを作るには
Changeイベントを使います。

Private Sub Worksheet_Change(ByVal Target As Range)


End Sub

そのChangeイベントは、キーボード上からの入力だけで発生するのではなく、
マクロでセルに対して編集したときもその都度発生するので、セルに対して10回編集すれば
イベントが10回発生してしまいます。時には無限ループって事もあります。

そんな時の為に、イベントを発生させないようにする(無効)命令が準備されています。
 
例えば、下のコードを実行すると、無限ループします。
セルを編集してはイベントが起動するの繰り返しになり抜け出す事ができません。

  Private Sub Worksheet_Change(ByVal Target As Range)
  
     Range("a1").Value = "111"
     Range("b1").Value = "222"
    Range("c1").Value = "333"

  End Sub

そこで、イベントを無効にする命令、

  Application.EnableEvents = False

という命令を付け加えます。  

  Private Sub Worksheet_Change(ByVal Target As Range)
         Application.EnableEvents = False
         Range("a1").Value = "111"
         Range("b1").Value = "222"
         Range("c1").Value = "333"
         Application.EnableEvents = True
  End Sub

  これで、イベントが発生しなくなり、無限ループする事はありません。

  必ず、最後にはイベントを有効にしてあげてください。
  
  Application.EnableEvents = True・・・を忘れず。

エクセルマクロ(VBA)、奥が深いですね。


同じカテゴリー(VBA)の記事

Posted by ミール at 09:29│Comments(0)VBA
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。