Excel VBA可防止删除单元格但允许编辑

AdR*_*ock 3 excel vba excel-vba

我制作了一个电子表格,用户可以将邮政编码和数量输入2个单元格,我还有其他单元格进行计算并显示结果.

我添加了一些VBA以防止任何人删除行和列,但我想防止删除范围内的任何单元格,但也允许用户对某些单元格进行更改,但也阻止编辑具有公式的单元格.

在单元格中E4,用户可以输入邮政编码.在E6,用户可以输入数量.这些可以编辑但不能删除.E8:E9并且E11:E14都是从列表中保存数据的下拉列表(验证).这些可以使用下拉菜单更改,但不能删除.

L10:L14,L16,L23:L27,L29,L30:L33都可以有自己的数据编辑,但不会被删除.

这个VBA会是什么样子?我猜它会使用Worksheet_Change() event.

Sid*_*out 5

这是你在尝试什么?用户可以编辑单元格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
Run Code Online (Sandbox Code Playgroud)

跟进

谢谢,这就是我想要做的.其他范围怎么样?它只是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
Run Code Online (Sandbox Code Playgroud)