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")

Категория
Функции работы с файлами

как в ячейке (или в 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

Примечание : Только документ должен быть сохранён, иначе Вы получите ошибку.

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