ユーザーが特定のフィールドを変更するのを止めようとしています。ただし、それらのフィールドがどの列に含まれるかはわかりません。最初に含まれる値のみです。
私の現在のアプローチはこれです:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim columnHeaderRange As Range
Set shtData = Worksheets("Data")
Set columnHeaderRange = Union(shtData.Columns(ColumnNumber(5, "example1")), _
shtData.Columns(ColumnNumber(5, "example2")), _
shtData.Columns(ColumnNumber(5, "example3")))
Set columnHeaderRange = Application.Intersect(Target, columnHeaderRange)
ElseIf Not (columnHeaderRange Is Nothing) Then
With Application
.EnableEvents = False
.Undo
MsgBox "Change is not possible.", 16
.EnableEvents = True
End With
Else
Exit Sub
End If
上記のコードの私の ColumnNumber 関数は、行とフィールドの値をパラメーターとして受け取り、列番号を返します。ただし、固定フィールド値を使用しているため、フィールドが変更されていると失敗し、ユニオン呼び出しが失敗します。
ユーザーがセルの値を変更しようとしたときに、セルの実際の値が変更される前にこのコードを実行する方法はありますか? あるいは、誰かがより良いアプローチを提案できますか?