我想用黄色突出显示 Excel 工作表中发生变化的任何单元格。目前,我有以下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Target.Interior.ColorIndex = 6
End Sub
这很好用并达到了预期目的,但有一个明显的问题。我无法还原更改(ctrl + z 不起作用),如果我将单元格更改回其原始内容,单元格将保持黄色,因为它被识别为更改,导致无限循环。我可以手动选择“无填充”来移除黄色填充,但我希望这是自动的。万一我在工作表中犯了一个错误并想回到单元格的原始内容,我希望单元格没有填充而无需手动填充。
有什么办法解决这个问题吗?
非常感谢任何帮助,谢谢!
全局变量在编程中是不受欢迎的,但这是一个你可以利用它的领域:
(i) 在工作表模块的开头声明变量,例如
Public prevTarget As String
(ii) 在即时窗口中手动初始化它,或者在
Workbook_Open()
过程中以编程方式初始化它,例如
Sheet1.prevTarget="A1"
(iii) 更新您的 Worksheet_Change() 程序
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count <> 1 Then Exit Sub
Range(prevTarget).Interior.ColorIndex = xlNone
Target.Interior.ColorIndex = 6
prevTarget = Target.Address
End Sub
这可能更适合您的使用,分 3 个步骤使用
Worksheet_SelectionChange()
而不是 Worksheet_Change()
:
选项显式 公共 goldTarget 作为范围
选项显式 私有子 Workbook_Open() ActiveCell.Interior.ColorIndex = 6 设置 gOldTarget = ActiveCell 结束子 私有子工作簿_BeforeClose(取消为布尔值) ' ' 恢复旧单元格: ' If (Not gOldTarget Is Nothing) 那么 gOldTarget.Interior.ColorIndex = xlColorIndexNone 万一 结束子
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' ' 突出显示当前单元格: ' Target.Interior.ColorIndex = 6 ' ' 恢复旧单元格: ' If (Not gOldTarget Is Nothing) 那么 gOldTarget.Interior.ColorIndex = xlColorIndexNone 万一 设置 gOldTarget = 目标 结束子
使用 Worksheet_SelectionChange(),它突出显示具有焦点的当前单元格。当您退出单元格时,高亮会被抑制。