|
以前に質問させていただいた者です。【40409】
前に教えていただいた時うまくいっていたのですが、ちょっと問題があり改良する必要が出てきましたので再度質問させていただきます。
ワークシートチェンジイベントで、ある特定のセルの値が変更された時にイベント(s_creategraph)が発生するようにしたいと考えています。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim onDate As Variant
Dim ofDate As Variant
Dim maxvalue As Variant
Application.EnableEvents = False
onDate = Worksheets("Sheet1").Range("B1").Value
ofDate = Worksheets("Sheet1").Range("D1").Value
maxvalue = Worksheets("Sheet1").Range("G1").Value
On Error GoTo End_Len
With Target
If onDate = "" Then
MsgBox "日付を入れてください"
Worksheets("車室別売上").Range("B1").Activate
GoTo End_Len
ElseIf ofDate = "" Then
MsgBox "日付を入れてください"
Worksheets("車室別売上").Range("D1").Activate
GoTo End_Len
ElseIf onDate > ofDate Then
MsgBox "正しい日付を入力してください"
Worksheets("車室別売上").Range("B1").Activate
GoTo End_Len
ElseIf maxvalue = "" Then
MsgBox "最大値を入れてください"
Worksheets("車室別売上").Range("G1").Activate
GoTo End_Len
End If
s_creategraph
End With
On Error GoTo 0
End_Len:
Application.EnableEvents = True
End Sub
しかし初期値をそのセルに入れたときにはこのイベントが発生して欲しくないので標準モジュールに
Application.EnableEvents = False
※初期値入力処理
Application.EnableEvents = True
としています。
初期値入力処理のところに、ひとつの標準モジュールにコードを書くとすごく長くなってしまうのでサブルーチン化しています。
サブルーチンごとに上記の「Application.EnableEvents = False」を入れるのはすごく厄介ですし、どこに書いたのかわからなくなってしまいますので、フラグを立ててワークシートチェンジイベントが走らないようにしたいと思っています。
しかし色々調べたのですがフラグを立てる具体的なやり方がわかりません。
テキストには「Boolean型のパブリック変数を定義して初期値にFalseを代入しておき・・・」と書いてありましたが、この方法でサブルーチン内でもその処理が有効になるのでしょうか?
よろしくお願いします。
|
|