![仅当我想更改单独的单元格时,数据输入才会在 Excel 单元格中强制执行](https://linux22.com/image/1512386/%E4%BB%85%E5%BD%93%E6%88%91%E6%83%B3%E6%9B%B4%E6%94%B9%E5%8D%95%E7%8B%AC%E7%9A%84%E5%8D%95%E5%85%83%E6%A0%BC%E6%97%B6%EF%BC%8C%E6%95%B0%E6%8D%AE%E8%BE%93%E5%85%A5%E6%89%8D%E4%BC%9A%E5%9C%A8%20Excel%20%E5%8D%95%E5%85%83%E6%A0%BC%E4%B8%AD%E5%BC%BA%E5%88%B6%E6%89%A7%E8%A1%8C.png)
我正在尝试制作一个 excel 文件,强制用户在文件中输入数据,不要让单元格留空。但我只想在用户更改某个单元格时强制用户输入数据。
这是必须输入支持信息才能输入分数的计分表。
例如,我选择单元格D12
,其中可能已经有数据:
- 如果我不尝试更改单元格,则什么也不会发生,并且我可以选择文件中的任何其他单元格。
- 如果我尝试更改单元格
D12
,则必须在单元格中输入数据E12
。如果我没有输入数据E12
,则无法更改D12
。
答案1
对于这个特定的任务,你可以做类似的事情:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$E$12" Then
ActiveSheet.Unprotect
Select Case Range("E12").Value
Case ""
Range("D12").Locked = True
Case Else
Range("D12").Locked = False
End Select
ActiveSheet.Protect
End If
End Sub
在工作表的代码中。如果您使用受保护的工作表,这将根据对 E12 的操作锁定/解锁 D12。
如果您不喜欢这种工作方式,或者不想保护工作表,您可以尝试类似但完全不同的方法。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$12" Then
If Range("E12").Value = "" And Range("D12").Value <> "" Then
Range("D12") = ""
MsgBox "Please enter E12 before D12"
End If
End If
End Sub
这样,如果您在 E12 为空时在 D12 中输入了某些内容,它将被删除,并且会出现一个消息框告诉您原因。这
If Target.Address = "$D$12" Then
是可选的,如果您总是想检查,可以完全删除,以防他们编辑 D12 然后删除 E12 中的值。或者您可以将其更改为
If Target.Address = "$D$12" Or Target.Address = "$E$12" Then
对于这种情况。