我正在处理一个电子表格,其中向用户提供了默认值。我将这些格式格式化为纯格式(白色背景/黑色文本)。
我设置了一个宏,用于在编辑值后将单元格设置为突出显示的格式(黄色背景/粗体)。
我试图在输入每个单元格时捕获其原始值(或Value2?),以便如果用户更改该值,它将使用条件格式宏突出显示该单元格,如果他们还原,则会设置BUT原来突出显示的内容的价值消失了。
例如,我有一个“名字”列,其中包含“斯蒂芬”单元格。如果用户编辑该单元格以说“ Joe”,它将突出显示以表明它已被编辑,不再是默认值。如果用户随后将单元格编辑为再次说“ Stephen”,则新值将与未经编辑的原始值匹配,并且将删除条件格式(突出显示)。
我已经阅读了一些教程here,但是未进行修改以满足我的需求的教程会引发错误。
我尝试将值设置为变量,但似乎无济于事。
Dim myCellValue As Variant
myCellSetValue.Value = Range.Value2
这是我现在拥有的宏。一旦单击它,它就会更改每个单元格的格式,而不管其编辑如何。
Private Sub Worksheet_Change(ByVal Target As Range)
Target.Interior.ColorIndex = 36
Target.Font.FontStyle = "Bold"
End Sub
我需要
1.仅在值更改时应用此格式
2.如果单元格的值与原始值匹配,则删除此格式
还可以将单元格“一键还原”为原始值吗?
答案 0 :(得分:1)
像这样的基础
Public varWas As Variant
Public varTo As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
varTo = Target.Value
If varTo = varWas Then
Target.Interior.Color = vbWhite
Target.Font.Bold = False
Else
Target.Interior.Color = vbRed
Target.Font.Bold = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
varWas = Target.Value
End Sub
****更新****
在标准模块中,创建以下内容
Public arrContentsAtStart As Variant
Public rngChecked As Range
Public Sub setup()
Set rngChecked = ActiveSheet.UsedRange
arrContentsAtStart = ActiveSheet.UsedRange.Value
End Sub
然后在工作表模块中添加以下内容,您将需要在打开的工作簿上运行设置,我想,这取决于您何时获取“原样”数据。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, rngChecked) Is Nothing Then
If Target.Value <> arrContentsAtStart(Target.Row, Target.Column) Then
' Value change format accordingly
Target.Font.Bold = True
ElseIf Target.Value = arrContentsAtStart(Target.Row, Target.Column) Then
' Reverted back to original value format accordingly
Target.Font.Bold = False
End If
End If
End Sub
答案 1 :(得分:0)
我们可以将 XFD 列用作 A 列中原始值的“内存”。
首先在 A 列中输入所有原始值。
第二将其输入标准模块并运行它:
Public A As Range
Public XFD As Range
Public setup As String
Public Sub Initialize()
Application.EnableEvents = False
Set A = Range("A:A")
Set XFD = Range("XFD:XFD")
A.Copy XFD
setup = "done"
Application.EnableEvents = True
End Sub
第三,将其输入到工作表代码区域:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Intersekt As Range, r As Range
If setup <> "done" Then Exit Sub
Set Intersekt = Intersect(A, Target)
If Intersekt Is Nothing Then Exit Sub
For Each r In Intersekt
If r.Value = XFD(r.Row) Then
r.ClearFormats
Else
r.Interior.Color = 65535
r.Font.Bold = True
End If
Next r
End Sub