Отметка времени VBA, выполняющая первый экземпляр, но не второй - PullRequest
0 голосов
/ 17 октября 2019

У меня большой набор данных с несколькими различными столбцами для обновления. Я пытаюсь создать способ отметки даты / времени, когда последний раз обновлялся столбец. Мне нужно сделать это для 4 отдельных случаев.

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

Sub Worksheet_Change(ByVal Target As Range)

Dim myTableRange1 As Range
Dim myDateTimeRange1 As Range
Dim myUpdatedrange1 As Range

Set myTableRange1 = Range("S:S")

If Intersect(Target, myTableRange1) Is Nothing Then Exit Sub

Set myDateTimeRange1 = Range("A" & Target.Row)
Set myUpdatedrange1 = Range("X" & Target.Row)


If myDateTimeRange1.Value = "" Then
    myDateTimeRange1.Value = Now

End If
myUpdatedrange1.Value = Now

End Sub

Sub Worksheet_Change2(ByVal Target As Range)

Dim myTableRange2 As Range
Dim myDateTimeRange2 As Range
Dim myUpdatedrange2 As Range

Set myTableRange2 = Range("T:T")

If Intersect(Target, myTableRange2) Is Nothing Then Exit Sub

Set myDateTimeRange2 = Range("zz" & Target.Row)
Set myUpdatedrange2 = Range("Y" & Target.Row)


If myDateTimeRange2.Value = "" Then
    myDateTimeRange2.Value = Now

End If
myUpdatedrange2.Value = Now

End Sub

**** ОБНОВЛЕНИЕ ****

Я также попытался объединить этот код вместе, как показано ниже:

Sub Worksheet_Change(ByVal Target As Range)

Dim myTableRange1 As Range
Dim myDateTimeRange1 As Range
Dim myUpdatedrange1 As Range
Dim myTableRange2 As Range
Dim myDateTimeRange2 As Range
Dim myUpdatedrange2 As Range

Set myTableRange1 = Range("S:S")
Set myTableRange2 = Range("T:T")

If Intersect(Target, myTableRange1) Is Nothing Then Exit Sub
If Intersect(Target, myTableRange2) Is Nothing Then Exit Sub

Set myDateTimeRange1 = Range("A" & Target.Row)
Set myUpdatedrange1 = Range("X" & Target.Row)
Set myDateTimeRange2 = Range("zz" & Target.Row)
Set myUpdatedrange2 = Range("Y" & Target.Row)


If myDateTimeRange1.Value = "" Then
    myDateTimeRange1.Value = Now
If myDateTimeRange2.Value = "" Then
    myDateTimeRange2.Value = Now

End If
myUpdatedrange1.Value = Now
End If
myUpdatedrange2.Value = Now

End Sub

И это ни к чему не привело.

Я новичок в VBA, поэтому любая помощь будет оценена. Спасибо

1 Ответ

1 голос
/ 17 октября 2019

Вам нужно что-то вроде этого (в форме структуры), чтобы не сбрасывать со счетов изменения в одном столбце.

Если вы изменили только T, ваш обновленный код завершит работу, прежде чем перейти к соответствующему биту кода.

Если вы изменили S и T, он сделает только бит S.

Sub Worksheet_Change(ByVal Target As Range)

Dim myTableRange1 As Range
Dim myDateTimeRange1 As Range
Dim myUpdatedrange1 As Range
Dim myTableRange2 As Range
Dim myDateTimeRange2 As Range
Dim myUpdatedrange2 As Range

Set myTableRange1 = Range("S:S")
Set myTableRange2 = Range("T:T")

If Not Intersect(Target, myTableRange1) Is Nothing Then
    'your column S code

ElseIf Not Intersect(Target, myTableRange2) Is Nothing Then
    'your column T code

End If

End Sub
...