Дата и время создания открытой или закрытой рабочей книги в VBA Excel. Использование внутренних свойств документа и системных атрибутов файла.
Дата и время создания рабочей книги
При автоматизации отчётности или работе с архивами Excel-файлов часто возникает необходимость узнать, когда именно была создана рабочая книга. Это может быть важно для аудита, контроля версий или просто из любопытства.
В этой статье разберём, как получить дату и время создания активной книги, любой другой открытой книги, а также закрытой книги с помощью встроенных средств VBA и объектов файловой системы.
Существует два принципиально разных источника даты создания файла:
- Внутренние свойства документа (BuiltinDocumentProperties)
Дату создания из внутренних свойств документа мы видим в окне «Свойства» файла на вкладке «Подробно» в значении параметра «Дата создания содержимого». - Системные атрибуты файла (дата создания файла операционной системой)
Дату создания документа операционной системой мы видим в окне «Свойства» файла на вкладке «Подробно» в значении параметра «Дата создания», а также на вкладке «Общие» в значении параметра «Создан».

Обратите внимание: на скриншоте дата создания (системный атрибут файла) больше даты создания содержимого (внутреннее свойство документа). Это результат смены операционной системы.
В большинстве реальных задач обычно используют именно системную дату создания файла, но мы рассмотрим оба способа.
Дата и время создания активной книги
Если книга уже открыта в Excel, получить её дату создания можно двумя способами: через встроенные свойства документа или через файловую систему (по пути к файлу).
Получение даты через свойства документа
Пример с получением даты и времени создания активной книги из внутренних свойств документа:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub ВнутренняяДатаСозданияАктивнойКниги() Dim dt As Variant ' Подавляем ошибку, если свойство недоступно On Error Resume Next dt = ActiveWorkbook.BuiltinDocumentProperties("Creation Date") On Error GoTo 0 If IsEmpty(dt) Then MsgBox "Дата создания не найдена. Возможно, книга не сохранена.", vbExclamation Else MsgBox "Книга: " & ActiveWorkbook.Name & vbCrLf & _ "Дата создания (внутреннее свойство): " & dt, vbInformation End If End Sub |

Свойство BuiltinDocumentProperties("Creation Date") возвращает дату создания, записанную внутри файла. Оно доступно для любой сохранённой книги.
Получение даты через файловую систему
Пример с получением даты и времени создания активной книги через файловую систему:
|
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 |
Sub СистемнаяДатаСозданияАктивнойКниги() Dim path As String Dim creationDate As Variant Dim fso As Object ' Получаем полный путь к активной книге path = ActiveWorkbook.FullName If path = "" Then MsgBox "Книга не сохранена! Сначала сохраните файл.", vbCritical Exit Sub End If ' Работаем с файловой системой Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(path) Then creationDate = fso.GetFile(path).DateCreated MsgBox "Файл: " & path & vbCrLf & _ "Дата создания (системная): " & creationDate, vbInformation Else MsgBox "Не удалось получить дату создания файла.", vbExclamation End If Set fso = Nothing End Sub |

Этот способ обращается к файловой системе и возвращает реальную дату создания файла, если, конечно, не произошла смена операционной системы. В файловой системе новой ОС, при копировании документов на диск, в качестве даты создания файла записывается текущая дата.
⚠️ Ограничение
Методы, основанные на файловой системе, работают только для сохранённых книг. Новая несохранённая книга не имеет файла на диске — дату создания получить невозможно.
Дата и время создания открытой книги
Выше мы рассмотрели способы получения даты и времени создания активной книги, как частного случая из группы открытых книг. Следующий пример кода VBA Excel позволяет выбрать любую книгу из коллекции открытых книг и определить дату и время ее создания:
|
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 48 49 50 51 |
Sub ВнутренняяДатаСозданияОткрытойКниги() Dim wbList As String, i As Long, wbCount As Long Dim chosenInput As String Dim targetWb As Workbook Dim dtCreated As Date wbCount = Application.Workbooks.Count If wbCount = 0 Then MsgBox "Нет открытых книг.", vbExclamation Exit Sub End If ' Формируем читаемый список For i = 1 To wbCount wbList = wbList & i & ". " & Application.Workbooks(i).Name & vbNewLine Next i ' Вызываем диалог выбора chosenInput = InputBox( _ prompt:="Введите номер книги из списка или её точное имя:" & vbNewLine & vbNewLine & wbList, _ Title:="Выбор открытой книги", _ Default:="1") If chosenInput = "" Then Exit Sub ' Нажата "Отмена" ' Ищем книгу: сначала по номеру, если не вышло – по имени On Error Resume Next If IsNumeric(chosenInput) Then Set targetWb = Application.Workbooks(CLng(chosenInput)) Else Set targetWb = Application.Workbooks(chosenInput) End If On Error GoTo 0 If targetWb Is Nothing Then MsgBox "Книга с таким номером или именем не найдена среди открытых.", vbExclamation Exit Sub End If ' Получаем дату создания через встроенные свойства On Error Resume Next dtCreated = targetWb.BuiltinDocumentProperties("Creation date").Value On Error GoTo 0 If IsDate(dtCreated) Then MsgBox "Книга: " & targetWb.Name & vbNewLine & vbNewLine & _ "Дата создания: " & Format(dtCreated, "dd.mm.yyyy hh:nn:ss"), vbInformation Else MsgBox "Свойство даты создания недоступно для этой книги.", vbExclamation End If End Sub |
Этот код VBA создает список открытых файлов Excel непосредственно в диалоговом окне InputBox.

Чтобы выбрать файл, достаточно в поле ввода указать его номер.
Дата и время создания закрытой книги
Для получения даты и времени создания закрытого файла, используется исключительно файловая система. VBA Excel позволяет обратиться к любому файлу на диске.
Пример определения даты и времени создания закрытой книги с выбором её через стандартное диалоговое окно выбора файла:
|
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 |
Sub СистемнаяДатаСозданияЗакрытойКниги() Dim fso As Object Dim selectedFile As Variant Dim filePath As String ' Открываем диалог выбора файла With Application.FileDialog(msoFileDialogFilePicker) .Title = "Выберите файл Excel для получения даты создания" .Filters.Clear .Filters.Add "Файлы Excel", "*.xls*; *.xlsx; *.xlsm; *.xlsb" .AllowMultiSelect = False If .Show = -1 Then filePath = .SelectedItems(1) Else MsgBox "Файл не выбран.", vbExclamation Exit Sub End If End With ' Получаем дату через FSO Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(filePath) Then Dim creationDate As Date creationDate = fso.GetFile(filePath).DateCreated MsgBox "Файл: " & filePath & vbCrLf & _ "Дата создания: " & creationDate, vbInformation Else MsgBox "Файл не найден.", vbCritical End If Set fso = Nothing End Sub |
Если системные настройки в вашем регионе отображают дату в неподходящем виде, используйте принудительный формат даты, как в примере из раздела «Дата и время создания открытой книги».
Дата последнего изменения файла
Время последнего изменения рабочей книги Excel можно узнать с помощью встроенной функции VBA — FileDateTime. Если изменений в файле не производилось, то будет возвращена дата создания документа.
Пример кода VBA Excel для получения даты последнего изменения активной книги:
|
1 2 3 4 5 |
Sub ДатаПоследнегоИзмененияАктивнойКниги() Dim fn As String fn = ActiveWorkbook.FullName MsgBox FileDateTime(fn) End Sub |
Подробнее о функции FileDateTime можно узнать из отдельной статьи об этой функции.