События Excel 2 для рабочих таблиц с разными целями - PullRequest
0 голосов
/ 09 января 2019

У меня есть лист 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

edit - работает сейчас (я также добавил, что столбец можно обозначить буквой):

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 голосов
/ 09 января 2019

Скопируйте код в событии 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
...