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)、奥が深いですね。
このセルでダブルクリックすると他の表に飛んでほしいとか
このセルの内容を変えると、自動計算してほしいとか、
そんな要望に応える為、準備された機能です。
でも、そんな便利なイベントでも、処理によっては発生(起動)
させたくない時もあります。
例えば、セルの内容を変更したと同時に自動計算するマクロを作るには
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)、奥が深いですね。
Posted by ミール at 09:29│Comments(0)
│VBA