2016-11-13 22 views
0

我有一个代码,如果在同一行的单元格中进行任何更改在列F:Excel VBA更新单元格中的日期如果在同一行中的单元格范围内有任何更改

Private Sub Worksheet_Change(ByVal Target As Range) 
' Code to put the date of the latest update following a change in the corresponding cell in column F 
Dim WorkRng As Range 
Dim rng As Range 
Dim xOffsetColumn As Integer 
Set WorkRng = Intersect(Application.ActiveSheet.Range("F:F"), Target) 
xOffsetColumn = -2 'The date is put 2 columns to the left of column F 
If Not WorkRng Is Nothing Then 
    Application.EnableEvents = False 
    For Each rng In WorkRng 
     If Not VBA.IsEmpty(rng.Value) Then 
      rng.Offset(0, xOffsetColumn).Value = Now 
      rng.Offset(0, xOffsetColumn).NumberFormat = "dd/mm/yyyy" 
     Else 
      rng.Offset(0, xOffsetColumn).ClearContents 
     End If 
    Next 
    Application.EnableEvents = True 
End If 
End Sub 

现在我需要去适应这个代码,以便日期在列d的细胞更新,如果有变化的细胞由同一行中列F到K.

我有很少的VBA知识,并会感谢任何帮助适应代码。

+1

'设置WorkRng =相交(Application.ActiveSheet.Range( “F:K”),目标)' –

+0

那并不行不通:问题在于抵消:如果我在F列中更改了某些内容,那么日期将放在D列(日期总是应该是的地方)。但是,如果我将列H中的内容更改为K,则日期将放在左侧的2列中。 – Antoon

+0

然后,您必须根据您的Target.Column在上面的代码中更改'xOffsetColumn'。 – Ralph

回答

0

这似乎工作:

Private Sub Worksheet_Change(ByVal Target As Range) 
' Code to put the date of the latest update following a change in the corresponding cell in column F 
    Dim WorkRng As Range, roww As Long 
    Dim rng As Range 
    Set WorkRng = Intersect(Range("F:K"), Target) 
    If Not WorkRng Is Nothing Then 
     Application.EnableEvents = False 
      For Each rng In WorkRng 
       roww = rng.Row 
       If Not rng.Value = "" Then 
        Cells(roww, "D").Value = Now 
        Cells(roww, "D").NumberFormat = "dd/mm/yyyy" 
       Else 
        Cells(roww, "D").ClearContents 
       End If 
      Next 
     Application.EnableEvents = True 
    End If 
End Sub 

我们只是不使用OFFSET()

+0

非常感谢!这样可行。 – Antoon

相关问题