Как добавлять дату каждый день в мою первую пустую строку - PullRequest
0 голосов
/ 20 января 2020

Мне бы хотелось, чтобы каждый день, когда я открывал Excel, мой Excel добавлял к нему сегодняшнюю дату. У меня есть этот код, но он не работает, иногда он делает то, что должен, а иногда пропускает строку, любая помощь, пожалуйста?

Sub Stretching()
'This procedure will run each time you open the workbook

   'Specify the required worksheet name in double quotes
    Dim ws As Worksheet
    Set ws = Sheets("Stretching")

    'Get the last row number filled with a value in Column A
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    'Check if the last entered date is the same as the current date, if so, exit
    'You need this check to see if you close the workbook then open it on the same day
    'so that the code does not enter the same date again in a new row.
    If ws.Cells(lastRow, 1).Value = Date Then Exit Sub

    'Fill a new row in Column A with the current date
    If IsEmpty(Cells(lastRow, 1)) Then
        ws.Cells(lastRow, 1).Value = Date
    Else
        ws.Cells(lastRow, 1).Offset(1, 0).Value = Date

    End If
End Sub

1 Ответ

1 голос
/ 20 января 2020

Некоторые рекомендации по вашему коду:

  1. Полное определение диапазонов поможет вам избежать противоречивых результатов. Это означает, что вы можете запускать процедуру, когда активный лист отличается от того, на который вы нацеливаетесь, и эта строка: Cells(Rows.Count, 1).End(xlUp).Row будет возвращать «последнюю строку», отличную от той, которую вы ожидаете
  2. Также попробуйте использовать имена переменных, которые легко понять. Например, ws против targetSheet

Пожалуйста, попробуйте этот код и дайте мне знать, если он работает:

Public Sub Stretching()
    'This procedure will run each time you open the workbook

   'Specify the required worksheet name in double quotes
    Dim targetSheet As Worksheet
    Set targetSheet = ThisWorkbook.Sheets("Stretching")

    'Get the last row number filled with a value in Column A
    Dim lastRow As Long
    lastRow = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Row

    'Check if the last entered date is the same as the current date, if so, exit
    'You need this check to see if you close the workbook then open it on the same day
    'so that the code does not enter the same date again in a new row.
    If targetSheet.Cells(lastRow, 1).Value = Date Then Exit Sub

    'Fill a new row in Column A with the current date
    If IsEmpty(targetSheet.Cells(lastRow, 1)) Then
        targetSheet.Cells(lastRow, 1).Value = Date
    Else
        targetSheet.Cells(lastRow, 1).Offset(1, 0).Value = Date
    End If

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