免责声明:我是VBA的新手,所以显而易见的事情可能会浮现在我头上。
我正在尝试设置2列,当其旁边的列仅在该工作表中接收到新数据时,该列会以当天的日期自动更新。
我试着用有限的知识创建新变量,以使它具有2条“行”(如果可以的话),但是它只是完全停止工作。
有什么方法可以“复制”下面的代码,以使O列在P列更新时以今天的日期更新,而E列在D更改时也以今天的日期更新?如果可能的话,当D中的文本为“ N / A”时,如果E列不更新,那将是很好的选择
感谢任何帮助或指示。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("P:P"), Target)
xOffsetColumn = 1
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
Else
Rng.Offset(0, xOffsetColumn).ClearContents
End If
Next
Application.EnableEvents = True
End If
End Sub
答案 0 :(得分:1)
您将需要进行检查,以使您只有1个worksheet_change
,但可以根据目标范围进行单独的操作。尝试类似的东西:
Select Case Target.Column
Case 15
'that stuffs
Case 16
'that other stuffs
End Select
edtit1 是的,@ GSerg,是的,真的...已更新
答案 1 :(得分:1)
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
UpdateNextColumnIfNeeded Application.Intersect(Me.Range("P:P"), Target)
UpdateNextColumnIfNeeded Application.Intersect(Me.Range("D:D"), Target)
Application.EnableEvents = True
End Sub
Private Sub UpdateNextColumnIfNeeded(ByVal WorkRng As Range)
If WorkRng Is Nothing Then Exit Sub
Dim Rng As Range
For Each Rng In WorkRng.Cells
If IsEmpty(Rng.Value) Then
Rng.Offset(0, 1).ClearContents
Else
Rng.Offset(0, 1).Value = Now
End If
Next
End Sub