防止单元在VBA中更新

时间:2014-03-27 13:19:13

标签: vba excel-vba excel

问题如下,我希望单元格更新为当前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

但是,我得到的是每次在工作表上有动作时单元格都会更新,而我只想要一个时间戳

3 个答案:

答案 0 :(得分:0)

将活动从Worksheet_SelectiontChange更改为Worksheet_ChangeWorksheet_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