Excel VBA – добавление даты и времени в имя файла в формате FILENAME_MMDDYY_HHMMSS

Вопрос или проблема

Несколько недель назад я опубликовал сообщение о том, как использовать VBA, чтобы запросить у меня название файла при сохранении файла Excel с помощью макроса. Спасибо за всю помощь. У меня это получилось!!

Теперь у меня есть еще один похожий вопрос.

Как мне получить месяц, день, год –И– час, минуту, секунду в VBA, а затем добавить это к имени файла?
Почему?
Чтобы, когда я нажимаю макрос для сохранения в формате Excel и PDF, ИМЯ ФАЙЛА было “с временной меткой” и исключило любые проблемы типа “О НЕТ! Я перезаписал файл другим!!”

Я попробовал несколько вариантов (снова, я не программист VBA [Я работаю в качестве медсестры !!]), но просто не могу получить всю информацию.

Dim mydate as text
Mydate = date(now)
Dim month as text
mymonth = month(now)
..и подобные объявления для часа, минуты, секунды и года

Затем объединить все это в текст ??…. строку, затем добавить это к имени файла

В процессе использования…

  1. Я вношу изменения в файл…. изменяю данные, изменяю шрифт…..

  2. Дата и время: 21 апреля 2023 года в 9:02:12 утра

  3. <нажмите на макрос> “код” (СМЕШНО!!)

  4. получить час, минуту и т.д. в формате MMDDYY (042123) и HHMMSS (090212)

  5. присвоить это переменной…. назовем ее FILESTAMP

  6. на этом этапе FILESTAMP равен 042123_090212

  7. соединить это с именем файла: FILENAME_042123_090212

  8. Файл сохраняется как “FILENAME_041223_090212.xls”

  9. еще немного поработать с файлом…внести изменения….и т.д.

  10. прошло пять минут….

  11. нажмите на макрос для сохранения и т.д.

  12. сохраненный файл теперь называется FILENAME_042123_090712 <== “07”, поскольку прошло 5 минут (2+5=7)

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

Буду благодарен за любую помощь.

Спасибо.

Попробуйте это:

Sub MakeBackupFile()
Rem Сохранить резервную копию (если возможно)
    Dim strPath
    Dim strFilename

On Error GoTo ErrorHandler
    strPath = Application.ActiveWorkbook.Path
    If strPath Like "http*" Then Exit Sub   ' Сохранение копии не работает в SharePoint
    strPath = strPath & "\Backups\"
    If Dir(strPath, vbDirectory) = "" Then MkDir strPath
    If Dir(strPath, vbDirectory) = "" Then Exit Sub ' Не удается создать подпапку Backups
    strFilename = Replace(ThisWorkbook.Name, ".", "_" & Format(Date, "YYYYMMDD") & "_" & Format(Time, "hhmmss") & ".")

    ThisWorkbook.SaveCopyAs strPath & strFilename
Exit Sub

ErrorHandler:
'    MsgBox "Убедитесь, что в папке, содержащей этот файл, есть подпапка с именем 'Backups'."
End Sub

Обратите внимание, что макрос не сохраняет текущий файл, а создает его копию с временной меткой в подпапке резервных копий. Временная метка отличается от того, что вы просили – дата записана в год-месяц-день порядке. Это позволяет вам получить файлы в правильном порядке, просто отсортировав их по имени (в случае MMDDYY сортировка по имени даст неправильную последовательность файлов).

Ответ или решение

Для решения вашей задачи с добавлением даты и времени в имя файла в формате FILENAME_MMDDYY_HHMMSS в Excel VBA, необходимо создать макрос, который будет генерировать строку с временной меткой и использовать её при сохранении файла. Ниже приведен детальный пример кода, который поможет вам реализовать это решение.

Шаги для создания макроса

  1. Открытие редактора VBA:
    В Excel перейдите во вкладку "Разработчик" (Developer), затем нажмите "Visual Basic" для открытия редактора VBA. Если вкладка "Разработчик" не отображается, активируйте её через "Настройки ленты".

  2. Создание нового модуля:
    В редакторе VBA, щелкните правой кнопкой мыши на любой элемент в "Project Explorer", выберите "Insert" и затем "Module". Это создаст новый модуль для вашего кода.

  3. Добавление кода:
    Скопируйте и вставьте следующий код в созданный модуль. Этот код создаст функцию, которая добавляет дату и время в ваше имя файла при сохранении.

Sub SaveFileWithTimestamp()
    Dim strPath As String
    Dim strFilename As String
    Dim FILESTAMP As String

    ' Получение текущей даты и времени
    FILESTAMP = Format(Now, "MMDDYY_HHMMSS")

    ' Определение пути к текущему файлу
    strPath = ThisWorkbook.Path

    ' Убедитесь, что пакет не находится в SharePoint или другой защищенной директории
    If strPath Like "http*" Then
        MsgBox "Файл не может быть сохранен в SharePoint."
        Exit Sub
    End If

    ' Генерация имени файла с временной меткой
    strFilename = "FILENAME_" & FILESTAMP & ".xls"

    ' Сохранение файла
    ThisWorkbook.SaveAs strPath & "\" & strFilename, FileFormat:=xlWorkbookDefault

    MsgBox "Файл успешно сохранен как: " & strFilename
End Sub

Объяснение кода

  1. Получение даты и времени:
    Функция Format(Now, "MMDDYY_HHMMSS") используется для форматирования текущей даты и времени в нужный формат. Это позволяет избежать проблем с записями, которые могут возникнуть из-за перезаписи файлов.

  2. Определение пути к файлу:
    Используется ThisWorkbook.Path для получения директории, в которой находится текущая книга Excel. Код проверяет, находится ли файл в SharePoint или в другом недоступном месте.

  3. Генерация имени файла:
    Имя файла формируется путём объединения строки "FILENAME_", временной метки и расширения .xls.

  4. Сохранение файла:
    Метод ThisWorkbook.SaveAs сохраняет файл с новым именем. Формат файла задается FileFormat:=xlWorkbookDefault, что сохраняет файл в формате Excel по умолчанию.

  5. Сообщение об успешном сохранении:
    После успешного сохранения, всплывающее сообщение информирует пользователя о том, что файл был успешно сохранен с временной меткой.

Заключение

Теперь вы можете использовать созданный макрос для надежного сохранения ваших файлов без риска их перезаписи. Не забудьте рисовать резервные копии ваших данных и тестировать макрос в безопасной рабочей среде перед использованием его в производственных файлах. Этот метод значительно снизит вероятность случайной потери информации и поможет вам эффективно управлять файлами.

Оцените материал
Добавить комментарий

Капча загружается...