Excel vba дата изменения файла

Определение даты и времени создания или последнего изменения любого файла в 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. Или она в Excel по-другому называется?  
Интересует Excel2003 и Excel2007

 

Не знаю, что такое AutoNew, но дату последнего сохранения файла можно узнать так  

  Sub Macro1()  
   MsgBox DateValue(ThisWorkbook.BuiltinDocumentProperties(«Last Save Time»))  
End Sub  

  P.S. Файл должен быть сохранён!

 

Еще есть функция:  
FileDateTime Function  

          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}Еще есть функция:  
FileDateTime Function  

          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}  
{quote}{login=Лузер™}{date=10.09.2008 06:59}{thema=}{post}  
А что делает в ворде AutoNew? Может подскажем аналог..{/post}{/quote}  
AutoNew это макрос, который выполняется при создании документа. Грубо говоря, это переопределение стандартных действий выполняемых при создании документа на основании того или иного шаблона.  
Таким образом можно изменить любую стандартную команду Word. Например, Save. У меня при сохранении файла автоматически к его имени добавляется дата и время сохранения и обновляется при повторном сохранении.  
С датой спасибо, разобрался:  
FileDateTime(ActiveWorkbook.Path)

 

хм. работает  

  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}  
Private Sub Workbook_Open()  

  End Sub  
{/quote}  
Open — это стандартная команда и мы ее переопределяем? Где узнать остальные команды? Все ли команды можно переопределить?

 

А остальные команды видны в выпадающем списке над полем редактирования кода в ЭтаКнига.  
Ищите и обрящете!

 

igorss

Пользователь

Сообщений: 89
Регистрация: 01.01.1970

{quote}{login=Pavel55}{date=10.09.2008 10:14}{thema=}{post}  
MsgBox FileDateTime(ActiveWorkbook.FullName)  

  полный путь к файлу, а не к папке, в которой файл лежит{/post}{/quote}  

  С помощью данного кода хотел сделать, что-бы в ячейке А1 выводилась дата последнего изменения книги, но выводится дата открытия файла. Что я сделал не так?  
Вот код:  
Range(«A1») = FileDateTime(ActiveWorkbook.FullName)

 

ytk5kyky

Пользователь

Сообщений: 2410
Регистрация: 01.01.1970

По моему, данный эффект можно наблюдать в проводнике.  
У файла было одно время «изменен», открыли — текущее время.  

    Посмотрите тут:  

http://www.planetaexcel.ru/forum.php?thread_id=12130

 

igorss

Пользователь

Сообщений: 89
Регистрация: 01.01.1970

Спасибо за ссылку, интересная ветка.  
Но вот например есть файл с данными, которые периодически изменяются. Как сделать, что-бы открыв файл, пользователь (а их несколько) видел дату последнего внесения изменений (данных). В предложеных вариантах, как Вы правильно сказали «У файла было одно время «изменен», открыли — текущее время».

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

Код в модуле ЭтаКнига, приведенный ниже, запишет в ячейку A1 первого листа дату и время сохранения:  

  Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  
 ThisWorkbook.Worksheets(1).Range(«A1») = Now  
End Sub

 
 

avmishin

Пользователь

Сообщений: 20
Регистрация: 01.01.1970

Есть ли возможность правильно определить дату последнего изменения активной книги    
Код fileLastDateChange = CStr(FileDateTime(ActiveWorkbook.FullName))  выдает не дату изменения книги  а дату(время) открытия книги

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

{quote}{login=avmishin}{date=20.04.2010 05:20}{thema=}{post}Есть ли возможность правильно определить дату последнего изменения активной книги    
Код fileLastDateChange = CStr(FileDateTime(ActiveWorkbook.FullName))  выдает не дату изменения книги  а дату(время) открытия книги{/post}{/quote}  
Посмотрите здесь:

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}Есть ли возможность правильно определить дату последнего изменения активной книги    
Код fileLastDateChange = CStr(FileDateTime(ActiveWorkbook.FullName))  выдает не дату изменения книги  а дату(время) открытия книги{/post}{/quote}  
Посмотрите здесь:

http://www.planetaexcel.ru/forum.php?thread_id=3596

{/post}{/quote}не сработало.выдает дату открытия активной книги.    
сработал код    
Sub Macro1()  
   MsgBox DateValue(ThisWorkbook.BuiltinDocumentProperties(«Last Save Time»))  
End Sub

 

{quote}{login=ZVI}{date=28.12.2009 02:07}{thema=}{post}Код в модуле ЭтаКнига, приведенный ниже, запишет в ячейку A1 первого листа дату и время сохранения:  

  Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  
 ThisWorkbook.Worksheets(1).Range(«A1») = Now  
End Sub{/post}{/quote}  
Я в макросах ни бум бум. Подскажите почему код не работает в 2007? Создаю макрос, заменяю код, жму сохранить… потом пытаюсь его вызвать, а в списке макросов пусто :))

 

DIM

Пользователь

Сообщений: 47
Регистрация: 03.01.2013

{quote}{login=Ксю}{date=03.12.2010 11:13}{thema=Re: }{post}{quote}{login=ZVI}{date=28.12.2009 02:07}{thema=}{post}  
Я в макросах ни бум бум. Подскажите почему код не работает в 2007? Создаю макрос, заменяю код, жму сохранить… потом пытаюсь его вызвать, а в списке макросов пусто :)){/post}{/quote}  

  Вероятно потому, что этот код должен быть в модуле ЭтаКнига, а не в Module3 )

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Ксю, этот код должен находиться в модуле книги.

 

{quote}{login=Юрий М}{date=03.12.2010 11:38}{thema=}{post}Ксю, этот код должен находиться в модуле книги.{/post}{/quote}  
Вот спасибо Вам Юрий! Выручили нас.  

  Методом тыка сделал 2 макроса, может кому пригодится  
1-й прописывает дату в колонтитул на всех  листах при вызове макроса (вставлять просто в модуль)  

  Sub Macro()  
For Each ws In Worksheets  
ws.PageSetup.LeftFooter = Now  
Next ws  
End Sub  

  2-й прописывает дату в ячейку А1 на всех  листах автоматом(вставлять в модуль книги)  

  Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  
For Each ws In Worksheets  
ws.Range(«A1») = Now  
Next ws  
End Sub

 

vvsid81

Пользователь

Сообщений: 1
Регистрация: 01.01.1970

#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)  
 ThisWorkbook.Worksheets(1).Range(«A1») = Now  
End Sub{/post}{/quote}  

  Друзья, а куда эту красоту писать, подскажите начинающему?

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!
vba save as

Learn More!

Понравилась статья? Поделить с друзьями:
  • Excel vba группировать строки
  • Excel vba границы таблицы
  • Excel vba границы листа
  • Excel vba глобальный массив
  • Excel vba вставить картинку в word