Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7456 / 13645 ツリー ←次へ | 前へ→

【38816】Worksheet_Changeでセル削除すると固まる hito 06/6/11(日) 14:35 質問[未読]
【38817】Re:Worksheet_Changeでセル削除すると固まる ぱっせんじゃー 06/6/11(日) 14:42 発言[未読]
【38818】Re:Worksheet_Changeでセル削除すると固まる hito 06/6/11(日) 15:12 発言[未読]
【38820】Re:Worksheet_Changeでセル削除すると固まる ぱっせんじゃー 06/6/11(日) 15:59 発言[未読]
【38824】Re:Worksheet_Changeでセル削除すると固まる hito 06/6/11(日) 16:56 発言[未読]
【38826】Re:Worksheet_Changeでセル削除すると固... ハチ 06/6/11(日) 19:32 発言[未読]
【38830】Re:Worksheet_Changeでセル削除すると固... hito 06/6/11(日) 21:14 お礼[未読]
【38829】Re:Worksheet_Changeでセル削除すると固まる よろずや 06/6/11(日) 20:46 回答[未読]
【38831】Re:Worksheet_Changeでセル削除すると固まる hito 06/6/11(日) 21:19 発言[未読]
【38859】Re:Worksheet_Changeでセル削除すると固まる よろずや 06/6/12(月) 22:18 回答[未読]
【39070】Re:Worksheet_Changeでセル削除すると固まる hito 06/6/17(土) 0:53 お礼[未読]

【38816】Worksheet_Changeでセル削除すると固まる
質問  hito  - 06/6/11(日) 14:35 -

引用なし
パスワード
   つい最近、VBAをはじめた初心者です。

ワークシートのあるセルが変更された場合に、別のセルに対してある処理を
おこなうという処理をしたくて、Worksheet_Changeが使えそうだという
ところまでは、わかったのですが、シート上でセルの削除を行った場合
一度Worksheet_Changeのイベントは発生するようなのですが
その後、ハングアップ?してしまいます。

なぜか、ウィンドウ右上の×ボタンだけは効くのですが、あとは
操作ができない状態になってしまいます。

普通にイベントの処理を終了してくれるだけでよいのですが、
どうしたらよいでしょうか?

やっと動いた〜!っと大喜びした直度だけに、途方に暮れています。

ちなみに、下記がそのシートに設定したプログラムです。

アドバイス、よろしくお願いいたします。


Private Sub Worksheet_Change(ByVal Target As Range)
  Dim indexRng As Range
  Dim tmpData As String

'画面更新抑止
  
  Application.ScreenUpdating = False
  
    MsgBox "worksheet_change!"
'繰り返し予定に変更あり

  If Intersect(Target, Range("E19:E218")) Is Nothing Then Exit Sub '変更範囲に繰り返し予定が含まれている
  '↑E19からE218が変更されたら、以下の処理をおこなう。
  
  Application.EnableEvents = False  'イベントの発生抑止(無限処理防止)

’したい処理を書く。
 
  Application.EnableEvents = True   'イベントの発生抑止の解除

End Sub

【38817】Re:Worksheet_Changeでセル削除すると固...
発言  ぱっせんじゃー  - 06/6/11(日) 14:42 -

引用なし
パスワード
   ↓の部分が悪さしているかもしれませんが、

>’したい処理を書く。

↓の対になるコードが無いようです。

>Application.ScreenUpdating = False

↓を処理の最後に入れたらどうなりますか?

Application.ScreenUpdating = True

【38818】Re:Worksheet_Changeでセル削除すると固...
発言  hito  - 06/6/11(日) 15:12 -

引用なし
パスワード
   パッセンジャーさん

お返事ありがとうございます。

>↓を処理の最後に入れたらどうなりますか?

>Application.ScreenUpdating = True


入れてみましたが、変わりませんでした。。。

【38820】Re:Worksheet_Changeでセル削除すると固...
発言  ぱっせんじゃー  - 06/6/11(日) 15:59 -

引用なし
パスワード
   >’したい処理を書く。

ちなみに

Target.Value = Target.Value + 1

としてみたら特に問題ありませんでした。
やはり、

>’したい処理を書く。

の中身に問題があるような気がします。

【38824】Re:Worksheet_Changeでセル削除すると固...
発言  hito  - 06/6/11(日) 16:56 -

引用なし
パスワード
   パッセンジャーさん

いろいろありがとうございます。

どうも、うまくいかなくて、また書き込ませていただきました。

たとえば、新規のEXCELシートを作成して
sheet1に、私のはじめの投稿プログラムをそのまま設定

それで、シートに戻って、B2セルを削除→上方向にシフト

すると、MSGBOXが表示されて、固まる。。。

となってしまいます。

行挿入をやってみたところ、やはりこちらも同じ現象になりました。

また、EXCEL2002を使っているのですが、別のパソコン2003
でやってみても同じでした。

何か、原因がわかるようでしたら、教えてほしいです。

よろしくお願いいたします。

【38826】Re:Worksheet_Changeでセル削除すると固...
発言  ハチ  - 06/6/11(日) 19:32 -

引用なし
パスワード
   ▼hito さん:

>それで、シートに戻って、B2セルを削除→上方向にシフト
>
>すると、MSGBOXが表示されて、固まる。。。

ぱっせんじゃーさんも指摘されていますが、
If Intersect(Target, Range("E19:E218")) Is Nothing Then Exit Sub

このExit Subの前にも、
Application.ScreenUpdating = Trueが必要だと思います。
E19:E218の範囲外だとFalseで終わってます。

【38829】Re:Worksheet_Changeでセル削除すると固...
回答  よろずや  - 06/6/11(日) 20:46 -

引用なし
パスワード
   イベント発生時の処理は本来システムがやってます。

そのシステムの処理の中からユーザ処理を呼び出しているのが、
いわゆる「イベント処理」と呼ばれているものです。

そのユーザ処理が終ったあとシステムのイベント処理に戻って
何らかの処理を続行するわけです。

で、ユーザ処理を実行してる間に環境が変わってしまうと
システムとしては非常にまずいことになります。

そのような危険な処理がどうしても必要な場合は、
OnTime を使ってイベント処理終了直後に実行させます。

【38830】Re:Worksheet_Changeでセル削除すると固...
お礼  hito  - 06/6/11(日) 21:14 -

引用なし
パスワード
   ハチさん

おっしゃるとおり、以下のような感じで、trueに戻す
処理を入れてみたところ、直りました!!(魔法のようです!)

  If Intersect(Target, Range("E10:E100")) Is Nothing Then
    Application.ScreenUpdating = True
    Exit Sub   
  End If

ぱっせんじゃーさん、ハチさんからご指摘いただいたように
これからは、falseにしたら、trueにちゃんと戻すことを
わすれないようにしたいと思います。

思ってた以上に大事なんですね。

ほんとうに助かりました!大変ありがとうございました!!

【38831】Re:Worksheet_Changeでセル削除すると固...
発言  hito  - 06/6/11(日) 21:19 -

引用なし
パスワード
   よろずやさん

アドバイスありがとうございます。

ハチさんのご指摘の内容で正しく動くようになったのですが
よろずやさんのon timeというのが、今ひとつ
使い方がわからないので、できれば教えていただけると
ありがたいです。

私がやっていた、falseにしても、trueに戻さない
というようなことをやっていても、on timeで
イベントを発生?させ、trueに戻すという処理を
いれておけば、間違った状態がリセットされる??
というような理解でよいでしょうか?

よろしくお願いいたします。

【38859】Re:Worksheet_Changeでセル削除すると固...
回答  よろずや  - 06/6/12(月) 22:18 -

引用なし
パスワード
   今回の不具合は、「’したい処理を書く。」とは関係ない様でしたので
特に言うことはありません。

もし、「’したい処理を書く。」がシートの削除みたいな荒業ですと、
OnTimeを使ったテクニックが必要になるかも知れませんね。

OnTimeについては、折があったらまた勉強してみてください。

【39070】Re:Worksheet_Changeでセル削除すると固...
お礼  hito  - 06/6/17(土) 0:53 -

引用なし
パスワード
   よろずやさん

いろいろご指導ありがとうございます。

まだ、ONTIMEについては、ちょっとだけ調べたくらいですが
奥が深そうですね。

じっくり勉強していきたいと思います。

ありがとうございました。

7456 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free