如果用户可以在未启用宏的情况下打开这本书,那么我不确定您的要求是否可行。
如果您可以假设宏已启用,您可以使用事件来阻止用户选择单元格(类似于您提到的 OFFSET),或者您可以手动跟踪更改到隐藏选项卡上,以记录更改并处理你认为合适的。实现后者的方法有很多,只要搜索“VBA tracking changes to a sheet”等即可。
这就是您使用 OFFSET 方法的方式:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells(1, 1).Text = "NA" Then
Beep
Cells(Target.Row, Target.Column).Offset(0, 1).Select
End If
End Sub
请记住,这是一种非常简单的方法。它不会阻止用户选择多个单元格(一个范围)并删除内容。它也不会阻止将值粘贴到包含“NA”的范围内。
更新:
以下是一个改进版本,如果其中一个单元格包含“NA”,至少可以防止用户选择多个单元格(用于粘贴或删除)。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim testarea As Range
Set testarea = Intersect(UsedRange, Target.Cells)
If Not (testarea Is Nothing) Then
Application.EnableEvents = False
For Each cell_to_check In Intersect(UsedRange, Target.Cells)
If cell_to_check.Text = "NA" Then
Beep
Cells(cell_to_check.Row, cell_to_check.Column).Offset(0, 1).Select
Do Until Selection.Text <> "NA"
Selection.Offset(0, 1).Select
Loop
Exit For
End If
Next
Application.EnableEvents = True
End If
End Sub
但是,这仍然存在一些缺陷,因为仍然可以将其他区域的单元格拖动到包含“NA”的单元格上。