为什么不在Excel中的受保护工作表中锁定单元格会阻止选择?

时间:2009-08-13 03:25:21

标签: excel vba

我正在处理受保护的Excel电子表格,但遇到了我编程锁定但仍可选择的单元格的问题。我无法直接点击它们来选择它们,但是如果我选择锁定单元格右下方的单元格然后按住左键单击一个单元格,那么所有9个单元格(包括“锁定”单元格)都是选择。我也可以点击拖动来选择9个单元格。我正在使用以下VBA代码来保护和设置选择标准:

Worksheets("Sheet1").Protect UserInterfaceOnly:=True
Worksheets("Sheet1").EnableSelection = xlUnlockedCells

我以相反的顺序尝试了这两个命令并得到了相同的结果。

我还使用Excel单元格格式化/保护菜单来做同样的事情并得到相同的结果。

我是否遗漏了一些明显的东西,或者是否有其他一些编程方式来标记单元格以便以后无法选择?

2 个答案:

答案 0 :(得分:1)

我认为您需要在Worksheet_SelectionChange事件中创建一些代码,以检查您的受保护单元格是否包含在新选择中,如果是,则选择其他单元格(可能是右侧或下方的下一个未受保护的单元格)

我没有查看过代码,但粗略搜索了“Worksheet_SelectionChange受保护的单元格选择”,提出了http://www.vbaexpress.com/kb/getarticle.php?kb_id=383

答案 1 :(得分:1)

你没有遗漏任何东西,这只是Excel维护选择的形状而不是细胞的保护状态。

细胞仍受保护,但可以复制。

使用Worksheet_SelectionChange事件将允许您运行代码以将受保护单元格的选择重定向到另一个单元格。此代码需要存储在您要保护的工作表中。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Selectedrange As Range
    Dim ProtectedRange As Range
    Dim ws As Worksheet

    Application.EnableEvents = False

    Set ProtectedRange = ActiveSheet.Range("A1:A10")

    Set Selectedrange = Intersect(Target, ProtectedRange)

    If Selectedrange Is Nothing Then
        Exit Sub
    Else
        ActiveSheet.Range("B1").Select
    End If

    Application.EnableEvents = True

End Sub

如果您只想阻止用户复制公式,则只需在代码中添加一行即可将“公式隐藏”设置为true。如果复制受保护的单元格,则仅复制值。

Worksheets("Sheet1").Range("A1:A10").Locked = True
Worksheets("Sheet1").Range("A1:A10").FormulaHidden = True
Worksheets("Sheet1").Protect UserInterfaceOnly:=True, Password:="123"
Worksheets("Sheet1").EnableSelection = xlUnlockedCells

另一种方法是将受保护的数据移动到另一个工作表中,并将其设置为“非常隐藏”,以便通过UI不再可见。 “非常隐藏”表格中的值仍然可以通过公式访问。

Worksheets("Sheet2").Visible = xlVeryHidden