エクセルマクロについての質問です。
excel2003 os=WindowsXP の環境で、下記のような条件のシートを作りたい。
1.セルの一部にデータの入力規則を "データ→入力規則" で1から999までしか入力できない様に設定している。
2.セルの入力が下記条件以外は色を付ける。
1)数字の変更がなかった場合
2)未記入欄に空白を入力した場合
2についてVBAでプログラミングしてみたのですが入力規則違反があった場合にUNDOのところで"UNDOメソッドは失敗しました。"
のエラーになってしまいます。
解決策がわからず困っています。ご教授頂ければ助かります。プログラムの一部は下記です。
icolcnt = Selection.Columns.Count
irowcnt = Selection.Rows.Count
icolalf = ActiveCell.Column
If icolcnt = 1 And irowcnt = 1 And icolalf = 5 Then
f_target = False
n_target = Target
Application.EnableEvents = False
Application.Undo
o_target = Target
If Trim(o_target) = "" And Trim(n_target) = "" Or Trim(o_target) = Trim(n_target) Then
Debug.Print "n_target = ", n_target, o_target
f_target = False
Else
Target.Value = n_target
f_target = True
End If
' Debug.Print "n_target = ", n_target, o_target
Application.EnableEvents = True
If f_target = True Then
t_target.Interior.ColorIndex = xlNone
For Each crng In t_target
With crng
With .Interior
.ColorIndex = 8
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End With
Next
End If
End If
コードの途中に出てくる t_target はTargetの間違いか、提示漏れでしょうか。
そう仮定して回答します。
通常、セルに値を入れた後、ActiveCellが移動するので、TargetとActiveCellのアドレスは異なりますが、入力規則に引っかかった場合、ActiveCellが移動しないためアドレスが一緒になりますからそこを利用しては?
具体的には
If icolcnt = 1 And irowcnt = 1 And icolalf = 5 Then
↓
If icolcnt = 1 And irowcnt = 1 And icolalf = 5 And (Target.Address <> ActiveCell.Address) Then
ところで、入力した後のActiveCellがE列で無い場合処理を行わないようになっていますが、セルに値を入れた後、Enterではなくカーソルで左右に移動して確定した場合も処理が行われませんがよろしいんですか?
お礼
mt2008様 ありがとございます。 ご教授頂いた修正をし思った動きになりました。