保护单元格,但允许下拉列表工作

保护单元格,但允许下拉列表工作

我想保护包含下拉列表的单元格,但我仍然希望下拉列表能够正常工作。

当我尝试保护它时,用户无法使用下拉列表选择其他项目或宏。

我收到此错误消息

“您尝试更改的单元格或图表受保护,因此是只读的。要修改受保护的单元格或图表,请先使用“不受保护的工作表”命令(“审阅”选项卡,“更改”组)删除保护。系统可能会提示您输入密码。”

答案1

下拉列表附加到单元格。这就是它存储数据的地方。验证将保证数据有效。

如果尚未锁定,请确保单元格未被锁定。右键单击单元格,单击“设置单元格格式”,然后转到“保护”选项卡。“锁定”复选框应处于未选中状态。

答案2

我认为这个问题可能被误解了。如果是这样,并且我的解释正确,那么这里有一个解决方案。

Excel 实际上允许电子表格用户覆盖使用验证列表的单元格;如果列表包含值“Apple”、“Peach”和“Orange”,则标准操作允许用户在单元格未受保护的情况下键入“Broccoli”,就像没有附加验证列表一样。但是,保护单元格和工作表会禁用从验证列表中选择项目的功能,这可能会带来问题。

如果是这个问题,这里有一个解决方案:

1.  Format the cell using the validation list so it's 
    unprotected. 
2.  With the cursor positioned at that cell, open the 
    Validation menu origintally used to identify the validation 
    list. 
3.  On the Settings tab of the Data Validation window pane,
    be sure that "ignore blank" is unchecked, and 
    continue to leave that window pane open. 
4.  On the "Error alert" tab of the Data Validation window
    pane:  
      a) Be sure "Show error alert after invalid data is
         entered" is checked. 
      b) Select "Stop" under the "Style" heading.
      c) Give your error alert a name under "Title"; this 
         can be anything, but a short title is best. 
      d) Under "Error message", type a short message that you
         want to appear if a user tries to manually type a value
         in the cell - something like "Please use the drop-down
         menu provided to select a value for this cell."
      e) Click "OK". 

这样可以阻止人们在要使用数据验证的单元格中输入任何内容,即使工作表不受保护。不过,您可能还是想保护工作表,以防止意外更新数据验证列表本身。

答案3

在我的电脑上(运行 Excel 2010 的 PC),下拉列表本身似乎附加在紧邻右侧的单元格上。因此,如果我想在 A7 中使用下拉列表,我必须解锁 A7 和 B7。

这可能是一个错误,但修复起来相对简单。

答案4

在受保护的工作表中:

将以下链接粘贴到工作簿中

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim wsh As Variant
    For Each wsh In Worksheets(Array("Sheet1"))
        wsh.EnableOutlining = True
        wsh.Protect UserInterfaceOnly:=True, Password:="", _
            DrawingObjects:=False, _
    Contents:=True, _
    Scenarios:=True, _
    AllowFormattingCells:=False, _
    AllowFormattingColumns:=False, _
    AllowFormattingRows:=False, _
    AllowInsertingColumns:=False, _
    AllowInsertingRows:=False, _
    AllowInsertingHyperlinks:=False, _
    AllowDeletingColumns:=False, _
    AllowDeletingRows:=False, _
    AllowSorting:=False, _
    AllowFiltering:=False, _
    AllowUsingPivotTables:=False
    Next wsh

Dim Oldvalue As String
Dim Newvalue As String

On Error GoTo Exitsub
If Target.Address = "$C$2" Then 'As required
    If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
    GoTo Exitsub
    Else: If Target.Value = "" Then GoTo Exitsub Else
        Application.EnableEvents = False
        Newvalue = Target.Value
        Application.Undo
        Oldvalue = Target.Value
        If Oldvalue = "" Then
            Target.Value = Newvalue
        Else
            Target.Value = Oldvalue & ", " & Newvalue
        End If
    End If
End If


Exitsub:
Application.EnableEvents = True

End Sub

相关内容