Определение даты и времени создания или последнего изменения любого файла в VBA Excel. Функция FileDateTime — описание, синтаксис, примеры.
Описание
Определение функции FileDateTime:
FileDateTime — это функция, которая возвращает дату и время создания или последнего изменения любого файла по его полному имени. Тип возвращаемых данных — Variant (Date).
Формат отображения даты и времени зависит от региональных настроек системы. Российский формат — dd.mm.yyyy h:nn:ss
.
Из наблюдений можно отметить, что функция FileDateTime, как правило, возвращает дату и время, которые отображаются в папке проводника справа от выбранного файла в столбце «Дата изменения» или «Дата», как на скриншоте из третьего примера.
Синтаксис
pathname
— полное имя файла, включающее букву диска, вложенные папки и краткое имя файла с расширением.
Примеры с функцией FileDateTime
Пример 1
Есть файл «Отчет.xlsx» по адресу «C:UsersEvgeniyDesktop», который был изменен 13 августа 2022 г., 0:55:05 (окно «Свойства:Отчет.xlsx»). Проверяем, что будет отображено в информационном окне MsgBox при использовании переменных разного типа для присвоения значений, возвращенных функцией FileDateTime:
Sub Primer1() Dim d As Date, s As String, n As Double d = FileDateTime(«C:UsersEvgeniyDesktopОтчет.xlsx») MsgBox d ‘Результат: 13.08.2022 0:55:05 s = FileDateTime(«C:UsersEvgeniyDesktopОтчет.xlsx») MsgBox s ‘Результат: 13.08.2022 0:55:05 n = FileDateTime(«C:UsersEvgeniyDesktopОтчет.xlsx») MsgBox n ‘Результат: 44786,0382523148 End Sub |
Пример 2
Примеры отображения в VBA Excel только даты, возвращенной функцией FileDateTime:
Sub Primer2() Dim d As Date d = FileDateTime(«C:UsersEvgeniyDesktopОтчет.xlsx») MsgBox Format(d, «Short Date») ‘Результат: 13.08.2022 MsgBox Format(d, «dd.mm.yy») ‘Результат: 13.08.22 End Sub |
Пример 3
Есть папка с файлами:
Необходимо из кода VBA Excel получить список файлов в папке «C:UsersEvgeniyDesktopНовая папка», пройтись по списку файлов циклом For Each… Next и записать на активный рабочий лист следующую информацию:
- № п/п — в первый столбец со второй строки;
- имя файла — во второй столбец;
- дату и время изменения файла — в третий столбец;
- создать строку заголовков — «№ п/п», «Имя» и «Дата»;
- осуществить автоподбор ширины столбцов и добавить границы ячеек.
Для получения списка файлов в заданной папке будем использовать метод FileSystemObject.GetFolder:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
Sub Primer3() Dim myPath As String, myFolder As Folder, myFile As File, n As Integer ‘Записываем в переменную myPath полное имя папки myPath = «C:UsersEvgeniyDesktopНовая папка» ‘Создаем новый экземпляр FileSystemObject Dim fso As New FileSystemObject ‘Присваиваем переменной myFolder ссылку на объект Folder Set myFolder = fso.GetFolder(myPath) ‘Проверяем, есть ли файлы в папке myFolder If myFolder.Files.Count = 0 Then MsgBox «В папке «» & myPath & «» файлов нет» Exit Sub End If ‘Записываем номер по порядку в первый столбец активного листа, ‘имя файла — во второй столбец, ‘дату изменения файла — в третий столбец. For Each myFile In myFolder.Files n = n + 1 Cells(n + 1, 1) = n Cells(n + 1, 2) = myFile.Name Cells(n + 1, 3) = FileDateTime(myFile.Path) Next ‘Заполняем строку заголовков With Cells(1, 1) .Value = «№ п/п» ‘Автоподбор ширины столбца .EntireColumn.AutoFit ‘Полужирное начертание .Font.Bold = True ‘Выравнивание значения по центру .HorizontalAlignment = xlCenter End With With Cells(1, 2) .Value = «Имя» .EntireColumn.AutoFit .Font.Bold = True .HorizontalAlignment = xlCenter End With With Cells(1, 3) .Value = «Дата» .EntireColumn.AutoFit .Font.Bold = True .HorizontalAlignment = xlCenter ‘Добавляем границы ячеек .CurrentRegion.Borders.LineStyle = True End With End Sub |
Результат работы кода:
Если сравнить дату и время изменения файлов в папке проводника и в таблице Excel, то можно заметить, что время изменения файла «Certificate.pdf» разнится на 1 час. Непонятно, почему это происходит, так как в свойствах файла также указано время изменения, как в папке проводника:
Именно из-за этого случая я добавил словосочетание как правило в утверждение, что функция FileDateTime возвращает дату и время, которые отображаются в папке проводника справа от выбранного файла в столбце «Дата изменения» или «Дата», что означает — возможны исключения.
Только начал работать с макросами в , до этого плотно работал и работаю с макросами в Word. |
|
Не знаю, что такое AutoNew, но дату последнего сохранения файла можно узнать так Sub Macro1() P.S. Файл должен быть сохранён! |
|
Еще есть функция: Returns a Variant (Date) that indicates the date and time when a file was created or last modified. Syntax FileDateTime(pathname) А что делает в ворде AutoNew? Может подскажем аналог.. |
|
{quote}{login=Лузер™}{date=10.09.2008 06:59}{thema=}{post}Еще есть функция: Returns a Variant (Date) that indicates the date and time when a file was created or last modified. Syntax FileDateTime(pathname) А что делает в ворде AutoNew? Может подскажем аналог..{/post}{/quote} |
|
{quote}{login=Лузер™}{date=10.09.2008 06:59}{thema=}{post}А что делает в ворде AutoNew? Может подскажем аналог..{/post}{/quote} |
|
хм. работает FileDateTime(ActiveWorkbook.Path) но, правильнее, наверное, так MsgBox FileDateTime(ActiveWorkbook.FullName) т.е. полный путь к файлу, а не к папке, в которой файл лежит |
|
Протестировал сейчас код MsgBox FileDateTime(ActiveWorkbook.Path) он показывает время последнего изменения любого файла в папке с активной книгой. А не последнее время изменения активной книги. |
|
А как теперь сделать, чтобы это действие выполнялось при открытии файла? |
|
Напишите свой код между этих двух строчек и поместите этот код в модуль ЭтаКнига (ThisWorkbook) Private Sub Workbook_Open() End Sub и тогда этот код будет срабатывать при открытии книги |
|
{quote}{login=Pavel55}{date=10.09.2008 11:33}{thema=}{post} End Sub |
|
А остальные команды видны в выпадающем списке над полем редактирования кода в ЭтаКнига. |
|
igorss Пользователь Сообщений: 89 |
{quote}{login=Pavel55}{date=10.09.2008 10:14}{thema=}{post} полный путь к файлу, а не к папке, в которой файл лежит{/post}{/quote} С помощью данного кода хотел сделать, что-бы в ячейке А1 выводилась дата последнего изменения книги, но выводится дата открытия файла. Что я сделал не так? |
ytk5kyky Пользователь Сообщений: 2410 |
По моему, данный эффект можно наблюдать в проводнике. Посмотрите тут: http://www.planetaexcel.ru/forum.php?thread_id=12130 |
igorss Пользователь Сообщений: 89 |
Спасибо за ссылку, интересная ветка. |
ZVI Пользователь Сообщений: 4328 |
Код в модуле ЭтаКнига, приведенный ниже, запишет в ячейку A1 первого листа дату и время сохранения: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) |
avmishin Пользователь Сообщений: 20 |
Есть ли возможность правильно определить дату последнего изменения активной книги |
ZVI Пользователь Сообщений: 4328 |
{quote}{login=avmishin}{date=20.04.2010 05:20}{thema=}{post}Есть ли возможность правильно определить дату последнего изменения активной книги http://www.planetaexcel.ru/forum.php?thread_id=3596 |
{quote}{login=ZVI}{date=21.04.2010 05:21}{thema=}{post}{quote}{login=avmishin}{date=20.04.2010 05:20}{thema=}{post}Есть ли возможность правильно определить дату последнего изменения активной книги http://www.planetaexcel.ru/forum.php?thread_id=3596 {/post}{/quote}не сработало.выдает дату открытия активной книги. |
|
{quote}{login=ZVI}{date=28.12.2009 02:07}{thema=}{post}Код в модуле ЭтаКнига, приведенный ниже, запишет в ячейку A1 первого листа дату и время сохранения: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) |
|
DIM Пользователь Сообщений: 47 |
{quote}{login=Ксю}{date=03.12.2010 11:13}{thema=Re: }{post}{quote}{login=ZVI}{date=28.12.2009 02:07}{thema=}{post} Вероятно потому, что этот код должен быть в модуле ЭтаКнига, а не в Module3 ) |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Ксю, этот код должен находиться в модуле книги. |
{quote}{login=Юрий М}{date=03.12.2010 11:38}{thema=}{post}Ксю, этот код должен находиться в модуле книги.{/post}{/quote} Методом тыка сделал 2 макроса, может кому пригодится Sub Macro() 2-й прописывает дату в ячейку А1 на всех листах автоматом(вставлять в модуль книги) Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) |
|
vvsid81 Пользователь Сообщений: 1 |
#24 15.03.2011 17:05:45 {quote}{login=ZVI}{date=28.12.2009 02:07}{thema=}{post}Код в модуле ЭтаКнига, приведенный ниже, запишет в ячейку A1 первого листа дату и время сохранения: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Друзья, а куда эту красоту писать, подскажите начинающему? |
FileDateTime
FileDateTime(PathName)
Функция FileDateTime позволяет узнать дату и время последней модификации файла. Перед вызовом функции есть смысл проверить существование файла с помощью функции Dir. Если файл с момента своего создания не модифицировался, время и дата последней модификации совпадают со временем и датой создания файла
Возвращаемое значение
Возвращает значение типа Variant(Date), содержащее дату и время последней модификации файла
Параметры
- PathName
- Обязательный аргумент типа String, содержащий имя файла(может содержать имя диска или папки). Если диск или папка не заданы, по умолчанию принимаются текущие диск и папка. Если файл не существует, генерируется ошибка времени исполнения File not found
Пример
' Узнаем дату и время последней
' модификации файла autoecex.bat
Print FileDateTime("c:autoexec.bat")
Категория
Функции работы с файлами
Return to VBA Code Examples
FileDateTime Description
Returns the date and time of when a file was created or last modified.
Simple FileDateTime Example
Assume a file “D:test.txt” was last modified on 10/21/2019 9:41:30 AM .
MsgBox FileDateTime("D:test.txt")
This will return 10/21/2019 9:41:30 AM.
FileDateTime Syntax
In the VBA Editor, you can type “FileDateTime(” to see the syntax for the FileDateTime Function:
The FileDateTime function contains an argument:
PathName: A string expression representing a file/folder/drive.
Examples of Excel VBA FileDateTime Function
To list the last modified time of the folder&files on C drive, you can use the following code.
Sub Dir_Example()
Dim fileName As String
Dim fullName As String
Dim rng As Range
Dim i As Integer
Set rng = Range("A1")
fileName = Dir("C:", vbDirectory)
i = 1
Do
fullName = "C:" & fileName
rng.Offset(i, 0) = fileName
rng.Offset(i, 1) = FileDateTime(fullName)
rng.Offset(i, 2) = FileLen(fullName)
rng.Offset(i, 3) = GetAttr(fullName)
fileName = Dir
If fileName = "" Then Exit Do
i = i + 1
Loop
End Sub
The result will be similar with the following.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!