为什么不在Excel中的受保护的工作表中locking单元格会阻止select?

我正在处理一个受保护的Excel电子表格,并遇到了一些单元格问题,这些单元格被编程locking,仍然可以select。 我不能直接点击它们来select它们,但是如果我select一个locking单元格的右下方的单元格,然后按住Shift键并点击左上angular的单元格,所有9个单元格(包括“locking的”单元格)都是select。 我也可以点击拖动来select9个单元格。 我正在使用下面的VBA代码来保护和设置select标准:

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

我已经按照相反的顺序尝试了这两个命令,并得到相同的结果。

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

我是否错过了一些显而易见的东西,或者是否有一些其他的编程方式来标记单元格,以便以后不能select?

我想你需要在Worksheet_SelectionChange事件中创build一些代码来检查你的受保护的单元是否包含在新的select中,如果是的话,select一些其他单元(可能是下一个未受保护的单元)。

我还没有审查代码,但粗略search“Worksheet_SelectionChange保护单元格select”提出http://www.vbaexpress.com/kb/getarticle.php?kb_id=383

您不会错过任何东西,这只是Excel维护select的形状而不是单元格的保护状态。

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

使用Worksheet_SelectionChange事件将允许您运行代码以将受保护单元格的selectredirect到另一个单元格。 这些代码需要存储在您要保护的工作表中。

 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