Excel VBA防止删除单元格,但允许编辑
我做了一个电子表格,用户可以input一个邮政编码和一个数量到2个单元格,我有其他单元格进行计算并显示结果。
我已经添加了一些VBA,以防止任何人删除行和列,但我想要防止删除的范围内的任何单元格,但也允许用户对某些单元格进行更改,但也阻止在那里编辑公式的单元格。
在单元格E4
,用户可以input邮政编码。 在E6
,用户可以input数量。 这些可以编辑但不能删除。 E8:E9
和E11:E14
都是从列表中保存数据的下拉列表(validation)。 这些可以使用下拉菜单进行更改,但不能删除。
L10:L14
, L16
, L23:L27
, L29
, L30:L33
都可以编辑它们的数据但不能删除。
什么VBA这个样子? 我想这将使用Worksheet_Change() event
。
这是你正在尝试? 用户可以编辑单元格E4
和E6
但不能留空。 我也假设手中的细胞不是空的。
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo Whoa Application.EnableEvents = False If Not Intersect(Target, Range("E4")) Is Nothing Then If Len(Trim(Range("E4").Value)) = 0 Then Application.Undo ElseIf Not Intersect(Target, Range("E6")) Is Nothing Then If Len(Trim(Range("E6").Value)) = 0 Then Application.Undo End If LetsContinue: Application.EnableEvents = True Exit Sub Whoa: MsgBox Err.Description Resume LetsContinue End Sub
跟进
谢谢你是我想要做的。 其他范围呢? 这只是一个IF的负载的情况下,或者我们可以使用CASE和循环? – AdRock 2分钟前
根据需要从下面添加/删除单元格地址。
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo Whoa Application.EnableEvents = False If Not Intersect(Target, Range("E4,E6,E8:E9,E11:E14,L10:L14,L16,L23:L27,L29,L30:L33")) Is Nothing Then If Len(Trim(Target.Value)) = 0 Then Application.Undo End If LetsContinue: Application.EnableEvents = True Exit Sub Whoa: MsgBox Err.Description Resume LetsContinue End Sub
你是部分正确的,但是Worksheet_Change()是在更改后触发的,所以在删除之后。 我要做的是有一个隐藏的工作表来存储用户input的值,然后你可以检查Worksheet_Change()新值是否为空(删除)。
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$E$4" Then ' check the previous value on the hidden sheet here, if changed, then save it, if empty, then restore it End If End Sub