【问题标题】:Change formatting of Cell when it is edited编辑单元格时更改其格式
【发布时间】:2018-06-12 08:14:19
【问题描述】:

如果值发生变化,我想更改单元格的格式。我只需要遮住它。

我正在尝试使用以下内容:

Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Interior.ColorIndex = 45
End Sub

但是,这太敏感了。例如,如果我删除一行,整行会改变颜色,因为从技术上讲它是一个变化。即使我进入一个单元格,不做任何更改并从中出来,它也会改变格式。

是否可以编辑上面的内容,以便仅在值更改时格式化单元格?

谢谢

【问题讨论】:

  • 如果一个单元格被清除了怎么办?一次操作可以更改多少个单元格?从字面上看,删除一行或一列会更改已使用范围内该行或列内所有单元格的值。
  • 我可能正在寻找一个不可能的理想。但是,如果一个单元格之前没有任何内容,并且有人选择了它并按下了退格键,则它不会格式化该单元格。但是,如果在按下退格键之前单元格中有内容,那么它将对其进行格式化。一次只能编辑 1 个单元格。如果它只在单元格中的值发生变化时格式化单元格,那将是理想的。
  • 尝试在 StackOverflow 搜索中搜索“Worksheet_Change”。会弹出很好的答案。 stackoverflow.com/search?tab=votes&q=Worksheet_Change
  • 可以限制编辑范围还是必须是整个工作表?

标签: vba excel


【解决方案1】:

我认为您可以使用以下代码作为进一步逻辑的基础。

这个想法是:我们需要在更改之前记住值,因此最好在选择某个范围时读取它(因为您在谈论单个单元格,所以我没有考虑由更多单元格组成的范围)。该值将存储在全局变量ValueOnEnter中。

当最终进行更改时,我们比较“之前”和“之后”的值,如果它们不同,则更改颜色。

Public ValueOnEnter As String

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Value <> ValueOnEnter Then
        Target.Interior.ColorIndex = 45
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    ValueOnEnter = Target.Value
End Sub

【讨论】:

    猜你喜欢
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多