Определение даты и времени создания или последнего изменения любого файла в 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")
Категория
Функции работы с файлами
как в ячейке (или в 2разных ячейках) excell хранить дату и время изменения файла (те что в свойствах файла)?
Нужно для решения проблемы — при работе с данными экселя в другом файле (сводн.табл.) — видеть дату последнего сохранения исходного файла. Чайник я в этом… не могу докопаться… вроде все перепробовал… Помогите!
6 ответов
275
03 ноября 2005 года
pashulka
985 / / 19.09.2004
Дело в том, что указанное Вами свойство, хранит время последнего сохранения рабочей книги, а значит Вы можете использовать соответствующее событие рабочей книги :
Код:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Worksheets(1).Range(«A1»).Value = Now ‘Now()
End Sub
Примечание : Разместить этот событие необходимо в модуле ThisWorkbook(ЭтаКнига) нужной рабочей книги.
405
03 ноября 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by ЖКа
как в ячейке (или в 2разных ячейках) excell хранить дату и время изменения файла (те что в свойствах файла)?
Нужно для решения проблемы — при работе с данными экселя в другом файле (сводн.табл.) — видеть дату последнего сохранения исходного файла. Чайник я в этом… не могу докопаться… вроде все перепробовал… Помогите!
Можете также воспользоваться для этого средствами VBS. Вот пример:
Код:
Function ShowFileModifiedInfo(ByVal fileSpec As String) As String
Dim myFSO As Object, myFile As Object
Set myFSO = CreateObject(«Scripting.FileSystemObject»)
If (myFSO.FileExists(fileSpec)) Then
Set myFile = myFSO.GetFile(fileSpec)
ShowFileModifiedInfo = myFile.DateLastModified
Else
ShowFileModifiedInfo = «Файл » & UCase(fileSpec) & » не найден.»
End If
End Function
Sub Test()
Dim timeModif As String
Const testFile = «c:tempbook.xls»
timeModif = ShowFileModifiedInfo(testFile)
MsgBox timeModif
End Sub
Такой способ избавляет от необходимости хранить нужные Вам значения в книге. Вы всегда сможете определить их «на лету».
275
11 ноября 2005 года
pashulka
985 / / 19.09.2004
Средствами VBA, также можно «на лету» определять дату и время последнего сохранения файла, например :
Код:
iFileDateTime = FileDateTime(ThisWorkbook.FullName)
iFileDateTime = FileDateTime(ActiveWorkbook.FullName)
iFileDateTime = FileDateTime(«C:ArchiveTemp.xls»)
305
12 ноября 2005 года
Kashuk
385 / / 21.02.2003
Цитата:
Originally posted by pashulka
Средствами VBA, также можно «на лету» определять дату и время последнего сохранения файла, например :
Код:
iFileDateTime = FileDateTime(ThisWorkbook.FullName)
iFileDateTime = FileDateTime(ActiveWorkbook.FullName)
iFileDateTime = FileDateTime(«C:ArchiveTemp.xls»)
А как это можно применить в ворде? Как «ThisWorkbook.FullName» заменить на текущий документ ворда?
305
12 ноября 2005 года
Kashuk
385 / / 21.02.2003
Цитата:
Originally posted by pashulka
Средствами VBA, также можно «на лету» определять дату и время последнего сохранения файла, например :
Код:
iFileDateTime = FileDateTime(ThisWorkbook.FullName)
iFileDateTime = FileDateTime(ActiveWorkbook.FullName)
iFileDateTime = FileDateTime(«C:ArchiveTemp.xls»)
А как это можно применить в ворде? Как «ThisWorkbook.FullName» заменить на текущий документ ворда?
275
12 ноября 2005 года
pashulka
985 / / 19.09.2004
Код:
iFileDateTime = FileDateTime(ThisDocument.FullName) ‘ActiveDocument
Примечание : Только документ должен быть сохранён, иначе Вы получите ошибку.