我试图阻止人们修改我的电子表格(大部分内容),同时仍允许他们使用自动筛选的排序功能。到目前为止,我所做的就是使用 Worksheet_Change 事件和 Application.Undo 自动撤消输入到我不想修改的单元格中的任何值。这很有效,只是它无法检测格式的变化。有人知道当单元格的格式(文本/背景颜色)发生变化时触发事件的方法吗?
谢谢!
答案1
在工作表级别限制的事件如下:
Activate
BeforeDoubleClick
BeforeRightClick
Calculate
Change
Deactivate
FollowHyperLink
PivotTableUpdate
SelectionChange
我想您可以在 SelectionChange 事件中尝试一些操作。如果有人更改了单元格的格式,然后移至另一个单元格,则会调用该事件。
您在该区域中的任何代码都会不断被调用,因此最好在执行任何操作之前进行一些快速检查以确保单元格在一定范围内、包含数据等。否则,当用户从一个单元格移动到另一个单元格时,您的工作表可能会变得非常缓慢。
答案2
我发现它非常简单:
在此工作簿中:
Public Sub Workbook_Open()
Set SelectLast = Range("A1")
SelectVal = Range("A1").Value
SelectColor = Range("A1").Interior.Color
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Dim LastVal As String
Dim LastColor As String
LastVal = ""
LastColor = ""
For i = 1 To SelectLast.Columns.Count
For y = 1 To SelectLast.Rows.Count
LastVal = LastVal & SelectLast.Cells(y, i).Value
LastColor = LastColor & SelectLast.Interior.Color
Next
Next
If ((LastVal <> SelectVal) Or (LastColor <> SelectColor)) Then MsgBox ("Something happend")
SelectVal = ""
SelectColor = ""
For i = 1 To Target.Columns.Count
For y = 1 To Target.Rows.Count
SelectVal = SelectVal & Target.Cells(y, i).Value
SelectColor = SelectColor & Target.Interior.Color
Next
Next
Set SelectLast = Target
End Sub
和 Module1
Global SelectLast As Excel.Range
Global SelectVal As String
Global SelectColor As String
稍加修改就可以观看任何内容。