Вопрос или проблема
Несколько недель назад я опубликовал сообщение о том, как использовать VBA, чтобы запросить у меня название файла при сохранении файла Excel с помощью макроса. Спасибо за всю помощь. У меня это получилось!!
Теперь у меня есть еще один похожий вопрос.
Как мне получить месяц, день, год –И– час, минуту, секунду в VBA, а затем добавить это к имени файла?
Почему?
Чтобы, когда я нажимаю макрос для сохранения в формате Excel и PDF, ИМЯ ФАЙЛА было “с временной меткой” и исключило любые проблемы типа “О НЕТ! Я перезаписал файл другим!!”
Я попробовал несколько вариантов (снова, я не программист VBA [Я работаю в качестве медсестры !!]), но просто не могу получить всю информацию.
Dim mydate as text
Mydate = date(now)
Dim month as text
mymonth = month(now)
..и подобные объявления для часа, минуты, секунды и года
Затем объединить все это в текст ??…. строку, затем добавить это к имени файла
В процессе использования…
-
Я вношу изменения в файл…. изменяю данные, изменяю шрифт…..
-
Дата и время: 21 апреля 2023 года в 9:02:12 утра
-
<нажмите на макрос>
“код” (СМЕШНО!!) -
получить час, минуту и т.д. в формате
MMDDYY
(042123) иHHMMSS
(090212) -
присвоить это переменной…. назовем ее FILESTAMP
-
на этом этапе FILESTAMP равен 042123_090212
-
соединить это с именем файла: FILENAME_042123_090212
-
Файл сохраняется как “FILENAME_041223_090212.xls”
-
еще немного поработать с файлом…внести изменения….и т.д.
-
прошло пять минут….
-
нажмите на макрос для сохранения и т.д.
-
сохраненный файл теперь называется 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, необходимо создать макрос, который будет генерировать строку с временной меткой и использовать её при сохранении файла. Ниже приведен детальный пример кода, который поможет вам реализовать это решение.
Шаги для создания макроса
-
Открытие редактора VBA:
В Excel перейдите во вкладку "Разработчик" (Developer), затем нажмите "Visual Basic" для открытия редактора VBA. Если вкладка "Разработчик" не отображается, активируйте её через "Настройки ленты". -
Создание нового модуля:
В редакторе VBA, щелкните правой кнопкой мыши на любой элемент в "Project Explorer", выберите "Insert" и затем "Module". Это создаст новый модуль для вашего кода. -
Добавление кода:
Скопируйте и вставьте следующий код в созданный модуль. Этот код создаст функцию, которая добавляет дату и время в ваше имя файла при сохранении.
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
Объяснение кода
-
Получение даты и времени:
ФункцияFormat(Now, "MMDDYY_HHMMSS")
используется для форматирования текущей даты и времени в нужный формат. Это позволяет избежать проблем с записями, которые могут возникнуть из-за перезаписи файлов. -
Определение пути к файлу:
ИспользуетсяThisWorkbook.Path
для получения директории, в которой находится текущая книга Excel. Код проверяет, находится ли файл в SharePoint или в другом недоступном месте. -
Генерация имени файла:
Имя файла формируется путём объединения строки"FILENAME_"
, временной метки и расширения.xls
. -
Сохранение файла:
МетодThisWorkbook.SaveAs
сохраняет файл с новым именем. Формат файла задаетсяFileFormat:=xlWorkbookDefault
, что сохраняет файл в формате Excel по умолчанию. -
Сообщение об успешном сохранении:
После успешного сохранения, всплывающее сообщение информирует пользователя о том, что файл был успешно сохранен с временной меткой.
Заключение
Теперь вы можете использовать созданный макрос для надежного сохранения ваших файлов без риска их перезаписи. Не забудьте рисовать резервные копии ваших данных и тестировать макрос в безопасной рабочей среде перед использованием его в производственных файлах. Этот метод значительно снизит вероятность случайной потери информации и поможет вам эффективно управлять файлами.