问题如下,我希望单元格更新为当前HH:MM:SS并在我更改另一个控制单元格中的值时更改内部颜色。
我为此目的编写的代码如下:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
lRow = Range("F" & Rows.Count).End(xlUp).Row
Set MR = Range("F3:F" & lRow)
For Each Cell In MR
If (Cell.Value = "T") And (Time < Cells(Cell.Row, "E")) Then Cells(Cell.Row, "G").Interior.ColorIndex = 10
Cells(Cell.Row, "G").Value = Time
Next Cell
End Sub
但是,我得到的是每次在工作表上有动作时单元格都会更新,而我只想要一个时间戳
答案 0 :(得分:0)
将活动从Worksheet_SelectiontChange
更改为Worksheet_Change
。 Worksheet_SelectiontChange
用于检测何时选择新的/不同的范围/单元格。此外,要限制特定单元格的更改,只需测试提供的Target
的行和/或列。我在测试多个单元格时经常使用Select Case
。
Private Sub Worksheet_Change(ByVal Target As Range)
Const COL_E = 5
Const COL_F = 6
Const COL_G = 7
If Target.Column = COL_F Then
Dim lRow As Long
lRow = Target.Row
If Cells(lRow, COL_F).Value = "T" Then
Cells(lRow, COL_E).Value = Time
Cells(lRow, COL_G).Interior.ColorIndex = 10
Else
' clear the data?
End If
End If
End Sub
答案 1 :(得分:0)
在我看来,在你的使用案例中完全没有VBA。
以下是我的建议:解锁工作簿中的每个可编辑单元格,控制单元格除外,将基于公式的条件格式添加到时间戳单元格并保护工作表。
更快更容易维护。
答案 2 :(得分:0)
将您的Sub移动到worksheet_change中,重新组织代码(除非您在要创建的单元格中,否则不应激活Row.Count自动查找)并将变量放在存储的条件数组中以便于更新。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim SC : SC = Split("3/6/T/E/G/10/F3:F/F", "/") 'Stored Conditions
If Target.Row = Cint(SC(0)) and Target.Column = Cint(SC(1)) Then
For Each Cell In Range(SC(6) & Range(SC(7) & Rows.Count).End(xlUp).Row)
If Cell.Value = SC(2) And Time < Cells(Cell.Row, SC(3)) Then
Cells(Cell.Row, SC(4)).Interior.ColorIndex = Cint(SC(5)) : Cells(Cell.Row, SC(4)).Value = Time
End If
Next
End If
End Sub