具有不同目标的Excel 2工作表事件

时间:2019-01-08 21:14:22

标签: excel vba events automation worksheet

我有一个excel工作表,我想为其分配多个工作表事件。 更具体地说,我希望每当更改B列中的一个单元格时,然后左边的一个单元格(列A)就获得行号。 另外,我希望每当更改J列中的一个单元格时,右边的一个单元格(第K列)都将获得今天的日期。

这对我俩来说都单独起作用,但是我认为将它们一起使用可能会做错事。

任何帮助将不胜感激!

Private Sub AG1(ByVal a_Target As Range)
   If Not Intersect(a_Target, Me.Range("B2:B3000")) Is Nothing Then
      Application.EnableEvents = False
      Cells(a_Target.Row, a_Target.Column - 1) = a_Target.Row
      Application.EnableEvents = True
   End If 
End Sub




Private Sub AG2(ByVal b_Target As Range)
   If Not Intersect(b_Target, Me.Range("J2:J3000")) Is Nothing Then
       Application.EnableEvents = False
       Cells(b_Target.Row, b_Target.Column + 1) = Date
       Application.EnableEvents = True
   End If
End Sub

编辑-现在可以使用(我还添加了该列可以称为字母):

Private Sub Worksheet_Change(ByVal Target As Range)


Application.EnableEvents = True

   If Split(Cells(1, Target.Column).Address(True, False), "$")(0) = "B" Then
      Application.EnableEvents = False
      Cells(Target.Row, Target.Column - 1) = Target.Row
      Application.EnableEvents = True

   ElseIf Split(Cells(1, Target.Column).Address(True, False), "$")(0) = "J" Then
       Application.EnableEvents = False
       Cells(Target.Row, Target.Column + 1) = Date
       Application.EnableEvents = True
   End If


End Sub

1 个答案:

答案 0 :(得分:2)

Worksheet_Change事件中复制代码,这应该可以解决您的问题。每当您输入任何单元格的值时,这都会触发,并且仅当它们与if语句中的范围相交时才满足条件。

Private Sub Worksheet_Change(ByVal Target As Range)

   If Not Intersect(Target, Me.Range("B2:B3000")) Is Nothing Then
      Application.EnableEvents = False
      Cells(Target.Row, Target.Column - 1) = Target.Row
      Application.EnableEvents = True
   End If

   If Not Intersect(Target, Me.Range("J2:J3000")) Is Nothing Then
       Application.EnableEvents = False
       Cells(Target.Row, Target.Column + 1) = Date
       Application.EnableEvents = True
   End If


End Sub