Zaktualizuj komórkę przy zmianie z datą dla liczby komórek w arkuszu

1

Mam arkusz roboczy z kolumną na każdy miesiąc. Każda komórka jest aktualizowana za pomocą innych arkuszy, ale chcę, aby data była dodawana automatycznie do komórki, kiedy to nastąpi. Próbowałem to zrobić, ale zmienia to daty na takie same dla całej kolumny. Co mnie ominęło? Jak mogę to zmienić, aby zmienić tylko datę komórki, która zmienia się tego dnia. Na przykład w ciągu dziesięciu dni dziesiątki użytkowników aktualizują komórki w tej kolumnie. Nie chcę, żeby daty były takie same.

Oto czego użyłem?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim targetRng As Range
Dim rng As Range
Dim c As Integer

Set targetRng = Intersect(Application.ActiveSheet.Range("H:H"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("J:J"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("L:L"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("N:N"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("P:P"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("R:R"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("T:T"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("V:V"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("X:X"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("Z:Z"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("AB:AB"), Target)
Set targetRng = Intersect(Application.ActiveSheet.Range("AD:AD"), Target)

c = 1

If Not targetRng Is Nothing Then
    Application.EnableEvents = False
      For Each rng In targetRng
        If Not VBA.IsEmpty(rng.Value) Then
          rng.Offset(0, c).Value = Now
          rng.Offset(0, c).NumberFormat = "m/dd/yyyy"
        Else
       rng.Offset(0, c).ClearContents
       End If

    Next
    Application.EnableEvents = True

    End If

    End Sub
Terrib
źródło
ostatni Set targetRng zastępuje wszystkie pozostałe.
Student Gary'ego
Czy istnieje sposób na robienie tego, co chcę, i który jest lepszy?
Terrib
Sprawdzić to out
cybernetic.nomad

Odpowiedzi:

0

Masz do czynienia z tym problemem, ponieważ całkowicie zająłeś kolumnę H do AD, aby uzyskać dane z innego arkusza, ale nie określiłeś, gdzie zostanie wstawiona bieżąca data i godzina.

Załóżmy, że przychodzące dane zajmują H1: AD1, a następnie w sąsiedniej kolumnie AE1 należy wprowadzić bieżącą datę, a dla tego skryptu OffsetColumn należy dołączyć zamiast zmiennej C , z którą korzystałeś.

Poniżej znajduje się przykładowy kod, który pomoże ci, jak korzystać z xOffsetColumn.

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("H:H"), 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
            Rng.Offset(0, xOffsetColumn).NumberFormat = "mm/dd/yyyy hh:mm:ss"
        Else
            Rng.Offset(0, xOffsetColumn).ClearContents
        End If
    Next

    Application.EnableEvents = True
End If

End Sub

Uwaga: Użyłem tylko jednej kolumny H, musisz uwzględnić wszystkie wymagane kolumny.

Mam nadzieję, że ci to pomoże.

Rajesh S.
źródło