VBA Excel. Функция FileDateTime

    Определение даты и времени создания или последнего изменения любого файла в VBA Excel. Функция FileDateTime — описание, синтаксис, примеры.

    Функция FileDateTime в VBA Excel

    Описание

    Определение функции FileDateTime:

    FileDateTime — это функция, которая возвращает дату и время создания или последнего изменения любого файла по его полному имени. Тип возвращаемых данных — Variant (Date).

    Формат отображения даты и времени зависит от региональных настроек системы. Российский формат — dd.mm.yyyy h:nn:ss.

    Из наблюдений можно отметить, что функция FileDateTime, как правило, возвращает дату и время, которые отображаются в папке проводника справа от выбранного файла в столбце «Дата изменения» или «Дата», как на скриншоте из третьего примера.

    Синтаксис

    pathname — полное имя файла, включающее букву диска, вложенные папки и краткое имя файла с расширением.

    Примеры с функцией FileDateTime

    Пример 1

    Есть файл «Отчет.xlsx» по адресу «C:\Users\Evgeniy\Desktop», который был изменен ‎13 ‎августа ‎2022 ‎г., ‏‎0:55:05 (окно «Свойства:Отчет.xlsx»). Проверяем, что будет отображено в информационном окне MsgBox при использовании переменных разного типа для присвоения значений, возвращенных функцией FileDateTime:

    Пример 2

    Примеры отображения в VBA Excel только даты, возвращенной функцией FileDateTime:

    Пример 3

    Есть папка с файлами:

    Необходимо из кода VBA Excel получить список файлов в папке «C:\Users\Evgeniy\Desktop\Новая папка», пройтись по списку файлов циклом For Each… Next и записать на активный рабочий лист следующую информацию:

    • № п/п — в первый столбец со второй строки;
    • имя файла — во второй столбец;
    • дату и время изменения файла — в третий столбец;
    • создать строку заголовков — «№ п/п», «Имя» и «Дата»;
    • осуществить автоподбор ширины столбцов и добавить границы ячеек.

    Для получения списка файлов в заданной папке будем использовать метод FileSystemObject.GetFolder:

    Результат работы кода:

    Если сравнить дату и время изменения файлов в папке проводника и в таблице Excel, то можно заметить, что время изменения файла «Certificate.pdf» разнится на 1 час. Непонятно, почему это происходит, так как в свойствах файла также указано время изменения, как в папке проводника:

    Именно из-за этого случая я добавил словосочетание как правило в утверждение, что функция FileDateTime возвращает дату и время, которые отображаются в папке проводника справа от выбранного файла в столбце «Дата изменения» или «Дата», что означает — возможны исключения.


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    14 комментариев для “VBA Excel. Функция FileDateTime”

    1. Константин

      Добрый день!
      Воспользовался Вашим примером Нр 3.
      Вставил код в лист, заменил полное имя, нажал проверить, а он ругается, выделяет "..., myFolder As Folder..." и "Sub Primer3()"
      Что-то не так я сделал?

    2. Константин

      Вечер добрый, Евгений!
      Библиотеку Microsoft Scripting Runtime (Tools >> References…) не подключал, т.к. побоялся что в школьных ПК с этим будет проблема.
      Получил результат, как у Вас показано на картинке в результате работы кода, но только с небольшими изменениями. Правильно это или нет не знаю, но работает.
      Изменил в строках:

      остальное в коде все осталось как у Вас в примере 3.
      Это все здорово, но к нужному результату Я не продвинулся.
      Как можно дополнить код, чтобы при обновлении даты (время) изменялся цвет ячейки (либо строки).
      Это для того, чтобы было видно, какие файлы обновлены (изменены), а при нажатии на Имя файла (к каждому файлу будет привязана гиперссылка), цвет ячейки (либо строки) должен поменяться в исходное положение.
      Вот, как то так.
      Что-то придумать можно?

      1. Евгений

        Константин, замените

        на

        А в модуль листа добавьте:

        1. Константин

          Евгений!
          В Книгу записал код, чтобы при открытии записанный код уже сработал. Правильно записал?

    3. Константин

      Евгений, Вы супер МОЛОДЕЦ!
      Код работает согласно пожеланий.

      Еще один штрих добавить, если можно.
      При запуске файла чтобы сработал этот код.

    4. Константин

      Евгений!
      В определенную папку от исполнителей собираются файлы с постоянными именами.
      Вы написали код, который нам подошел.
      Теперь нам видно какие файлы обновились, далее мы нажимаем на гиперссылку данного файла, он открывается, данные таким способом обновляются, закрываем и работаем далее с основным документом (куда стекаются все данные).

      Чтобы данные обновлялись БЕЗ открытия файлов, это реальность или фантастика, подскажите пожалуйста!

      1. Евгений

        Для этого можно в ячейки, которые обновляются из закрытой книги, вставить формулы с указанием адреса книги:

        Можно набрать знак =, выбрать ячейку в другой книге и нажать галочку ввода формулы. После закрытия другой книги, ее адрес добавится в формулу автоматически.

    5. Константин

      Добрый день Евгений!
      Вы помогли с написанием кода. Работает он согласно пожеланий, но слишком долго открывается, если к нему прикрепить гиперссылку. Отдельным файлом работает быстро хорошо. Может есть вариант улучшить быстродействие по открытию этого файла через гиперссылку.

      Код в Книге

      Код на Листе

      Код в Модуле

      1. Евгений

        Здравствуйте, Константин!
        Подключите временно библиотеку Microsoft Scripting Runtime. Сначала проверьте код как есть. Если не поможет, примените раннюю привязку объектов, как было у меня в примере. Если и это не поможет, тогда не знаю как ускорить.

    6. Константин

      Евгений!
      Код в файле работает хорошо как нужно.
      Вот только если к нему применить гиперссылку, файл открывается долго, но если удалить код из Книги

      то файл запускается через гиперссылку быстро. Однако если разместить кнопку на Листе с кодом, то код работает ещё медленнее.
      Без гиперссылок, все хорошо, вопросов нет.

      Может есть другой выход?
      Пожелания кода выдумывались для такой схемы:
      Отчет1.xlsm -> Книга1.xls -> Книга1.xls -> Учёт.xls
      У исполнителя два файла Отчет1.xlsm, Книга1.xls.
      У меня два файла Книга1.xls, Учёт.xls.
      Исполнитель: в Книга1.xls из Отчет1.xlsm данные поступают методом =…
      Далее файл Книга1.xls исполнитель отправляет по Эл.почте мне. Я его закидываю в определённую папку с таким же именем с заменой.
      Далее данные из Книга1.xls должны отобразится в основном файле Учёт.xls методом =…
      Вот тут то и засада. Если у себя полученный файл не открою, данные не обновляются.
      Поэтому такой код и собирали.
      Может что-то или как-то переиграть с кодом?
      Спасибо!

    Добавить комментарий

    Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.