Как я могу сделать так, чтобы мой код VBA давал мне нужную отметку даты? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь создать энергонезависимую отметку даты в ячейках столбца А, не все сразу, ячейка за ячейкой, поскольку записи сделаны.В приведенном примере я попытался добавить штамп, когда значение обнаруживается в ячейках B, C и D в одной строке.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
For i = 2 To 10000
If Cells(i, “B”).Value <> “” And Cells(i, “C”).Value <> “” And Cells(i, “D”).Value <> “” And Cells(i, “A”).Value = “” Then

Cells(i, "A").Value = Date & " " & Time
Cells(i, "A").NumberFormat = "m/d/yyyy h:mm AM/PM"
End If
Next
Range("A:A").EntireColumn.AutoFit
End Sub

К сожалению, я только начинаю пониматьиз того, что я смотрю в коде VBA, и у меня нет фона в коде, поэтому я не знаю, с чего начать это исправлять.как сказать, что нужно идти, если введены записи

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Попробуйте это, чтобы избавиться от цикла:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    If Target.Count = 1 And Target.Column > 1 And Target.Column < 5 Then
        If Cells(Target.Row, "B").Value <> "" And Cells(Target.Row, "C").Value <> "" And Cells(Target.Row, "D").Value <> "" And Cells(Target.Row, "A").Value = "" Then
            Cells(Target.Row, 1).Value = Now
            Cells(Target.Row, 1).NumberFormat = "m/d/yyyy h:mm AM/PM"
            Range("A:A").EntireColumn.AutoFit
        End If
    End If
End Sub

Короче говоря, когда вы вносите изменения в столбцы BC или D, он проверит, заполнены ли все 3 для этой строки, и затем поместитотметка времени, если у нее ее нет.Пропуск циклаЕсли вы вставляете данные вместо того, чтобы их вводить, они не будут работать, вместо этого используйте цикл из ответа Павла.

0 голосов
/ 07 февраля 2019

Похоже, что вы хотите получить метку даты, когда столбцы B: D заполнены, а столбец A по-прежнему пуст.

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

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Range("B:D"), Target) Is Nothing Then
        On Error GoTo exit_handler
        Application.EnableEvents = False
        Dim r As Range
        For Each r In Intersect(Range("B:D"), Target).Rows
            If Cells(r.Row, "B").Value <> vbNullString And Cells(r.Row, "C").Value <> vbNullString And _
               Cells(r.Row, "D").Value <> vbNullString And Cells(r.Row, "A").Value = vbNullString Then
                Cells(i, "A").Value = Now
                Cells(i, "A").NumberFormat = "mm/dd/yyyy h:mm AM/PM"
            End If
        Next t
    End If

exit_handler:
    Application.EnableEvents = True

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