사용자가 변경 한 특정 필드를 중지하려고합니다. 그러나 그 필드가 어떤 열에 포함될 것인지, 처음에 포함될 값만 알 수 없습니다.VBA가 초기 셀 값만 참조하여 셀 값을 변경하는 것을 방지합니다.
나의 현재 접근이있다 :
는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 함수는 변수로서 로우 및 필드의 값을 취하고 열 번호를 반환한다. 고정 필드 값을 사용하고 있기 때문에 필드가 변경되어 내 공용 호출이 실패하면이 작업은 실패합니다.
사용자가 셀 값을 변경하려고했지만이 셀의 실제 값이 변경되기 전에이 코드를 실행하는 방법이 있습니까? 또는 누구든지 더 나은 접근법을 제안 할 수 있습니까?
현재 시트에서 확인해야 할 값/필드 목록이 있고 변경되지 않았는지 확인하십시오. –
예 값 목록이 있습니다 – db579
샘플을 볼 수 있습니까? 또한 코드가 여러 시트에 대해 작동하도록 하시겠습니까? –