Как объединить два частных вложенных рабочего листа - изменение (целевое значение как диапазон) в одном рабочем листе? - PullRequest
0 голосов
/ 25 апреля 2019

Отказ от ответственности: я очень плохо знаком с VBA, поэтому очевидные вещи, вероятно, пролетают над моей головой.

Я пытаюсь настроить 2 столбца, которые автоматически обновляются в соответствии с датой того дня, когда столбец рядом с ним получает новые данные только на этом листе.

Я пытался, используя мои ограниченные знания, создавать новые переменные, чтобы у него было 2 «строки», если это имеет смысл, но он просто перестал работать вообще.

Можно ли каким-либо образом «продублировать» приведенный ниже код, чтобы столбец O обновлялся с сегодняшней датой при обновлении столбца P, и таким же образом для столбца E при изменении D? Если возможно, было бы неплохо, если бы столбец E не обновлялся, когда текст в D был "N / A"

Любая помощь или указатели приветствуются.

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 ]

1 голос
/ 25 апреля 2019
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
1 голос
/ 25 апреля 2019

Вам нужно будет поставить чеки на место, чтобы у вас было только 1 worksheet_change, но разрешать отдельные действия в зависимости от целевого диапазона. Попробуйте что-то вроде:

Select Case Target.Column
    Case 15
        'that stuffs
    Case 16
        'that other stuffs
End Select

edtit1 да, @GSerg, это правда ... обновлено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...