如何在一个工作表中合并两个私有子工作表_Change(按目标值按Val的目标)?

时间:2019-04-25 13:51:13

标签: excel vba

免责声明:我是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

2 个答案:

答案 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