防止用户编辑单元格,除了实际的单元格数据

我有一个电子表格,用于跟踪何时向我发送报告。 对于那些我没有收到的报告,我有一个黑色的单元格(一个黑色的单元格)。 locking单元格实际上并不奏效,因为它们不能更改单元格中的数据。 (完全披露,这是一个条件格式做填充,如果单元格中有“客户端”,它填充黑色)。

如何防止用户更改“客户”单元? 有些细胞不是黑色的,有的则是黑色的。 我知道有一个Worksheet_Change ,我可以使用,但我不能完全得到,以确定用户更改的单元格颜色。

我想我也许需要一个Worksheet_SelectionChange事件?

关键是我想不出更改之前检查单元格的填充颜色的方法,如果在更改之后它们不同,请执行一个消息框或其他任何操作。 (实际上,我会在用户改变之前检查单元格是否是“客户端”,如果是,请不要更改)。

我是否已经明白了这一点,并忽略了一些显而易见 我想find一个解决scheme,我不只是编程填充哪些单元格,并检查这些单元格是否更改。

编辑:我只是想尝试结合这两个Change事件,这似乎工作,但我不知道这是否是最好的方法来做到这一点:(这是在工作表模块)

 Option Explicit Dim isClient As Boolean Private Sub worksheet_SelectionChange(ByVal target As Range) If target.Column = 5 Or target.Column = 6 Then If target.Value = "Client" Then isClient = True Else isClient = False End If End If End Sub Private Sub Worksheet_Change(ByVal target As Range) If target.Column = 5 Or target.Column = 6 And isClient = True Then Debug.Print "This has 'client'" target.Value = "Client" isClient = False End If End Sub 

要知道改变之前的旧颜色,我们可以使用Application.Undo

 Private Sub Worksheet_Change(ByVal target As Range) Dim newValue As Variant If target.Column = 5 Or target.Column = 6 Then newValue = target.Value Application.EnableEvents = False Application.Undo Debug.Print target.Value 'old value Debug.Print target.DisplayFormat.Interior.Color 'old color 'if it_is_OK then target.Value = newValue Application.EnableEvents = True End If End Sub 

或者只需将其值更改为“客户端”时locking该单元格即可:

 Private Sub Worksheet_Change(ByVal target As Range) If target.Column = 5 Or target.Column = 6 And target.Value = "Client" Then target.Worksheet.Unprotect target.Locked = True target.Worksheet.Protect End If End Sub