Vba дата создания файла excel
Добрый день!
Подскажите пожалуйста как в ячейку листа вставить дату создания этого же файла. Именно дату создания (из атрибутов файла), а не дату изменения или открытия.
Спасибо
ПС. поиск по форуму результатов не дал
Добрый день!
Подскажите пожалуйста как в ячейку листа вставить дату создания этого же файла. Именно дату создания (из атрибутов файла), а не дату изменения или открытия.
Спасибо
ПС. поиск по форуму результатов не дал MifV
ПС. поиск по форуму результатов не дал Автор - MifV
Дата добавления - 16.07.2014 в 19:49
Здравствуйте
Excel этого не умеет, но можно на VBA:
Sub MifV()
Dim objFSO As Scripting.FileSystemObject
Dim fsoFile, DateCreate
Dim FilePath As String
Set objFSO = New Scripting.FileSystemObject
FilePath = "путь к файлу"
Set fsoFile = objFSO.GetFile(FilePath)
DateCreate = (fsoFile.DateCreated)
[a1] = DateCreate 'в ячейку А1 текущего листа вставляем дату создания файла
End Sub
Здравствуйте
Excel этого не умеет, но можно на VBA:
Sub MifV()
Dim objFSO As Scripting.FileSystemObject
Dim fsoFile, DateCreate
Dim FilePath As String
Set objFSO = New Scripting.FileSystemObject
FilePath = "путь к файлу"
Set fsoFile = objFSO.GetFile(FilePath)
DateCreate = (fsoFile.DateCreated)
[a1] = DateCreate 'в ячейку А1 текущего листа вставляем дату создания файла
End Sub
Sub MifV()
Dim objFSO As Scripting.FileSystemObject
Dim fsoFile, DateCreate
Dim FilePath As String
Set objFSO = New Scripting.FileSystemObject
FilePath = "путь к файлу"
Set fsoFile = objFSO.GetFile(FilePath)
DateCreate = (fsoFile.DateCreated)
[a1] = DateCreate 'в ячейку А1 текущего листа вставляем дату создания файла
End Sub
Serge_007, Спасибо! я, к сожалению, совсем не силен в ВБА, при выполнении выдает ошибку "User-defined type not defined" что я делаю не так?
Serge_007, Спасибо! я, к сожалению, совсем не силен в ВБА, при выполнении выдает ошибку "User-defined type not defined" что я делаю не так? MifV
FileDateTime позволяет узнать дату и время последней модификации файла. Если файл с момента своего создания не модифицировался, время и дата последней модификации совпадают со временем и датой создания файла
FileDateTime позволяет узнать дату и время последней модификации файла. Если файл с момента своего создания не модифицировался, время и дата последней модификации совпадают со временем и датой создания файла
FileDateTime позволяет узнать дату и время последней модификации файла. Если файл с момента своего создания не модифицировался, время и дата последней модификации совпадают со временем и датой создания файла
Serge_007, да всё получилось, спасибо. (правда помимо даты вписывает еще и время, но это не важно).
Подскажите еще, а как теперь сделать, чтобы этот макрос был привязан к определенному шаблону и выполнялся и при первом сохранении книги, созданной из этого шаблона.
Serge_007, да всё получилось, спасибо. (правда помимо даты вписывает еще и время, но это не важно).
Подскажите еще, а как теперь сделать, чтобы этот макрос был привязан к определенному шаблону и выполнялся и при первом сохранении книги, созданной из этого шаблона. MifV
Serge_007,
а если так?
Serge_007,
а если так?
С уважением,
Алексей
MS Excel 2003 - the best.
krosav4ig, ну, вообще-то можно и "совсем позднее" связывание применить без подключения Microsoft Scripting Runtime и назначения объектов:
[vba]
Sub CR_DT()
Debug.Print CreateObject("Scripting.FileSystemObject").GetFile(ThisWorkbook.FullName).DateCreated
End Sub
krosav4ig, ну, вообще-то можно и "совсем позднее" связывание применить без подключения Microsoft Scripting Runtime и назначения объектов:
[vba]
Sub CR_DT()
Debug.Print CreateObject("Scripting.FileSystemObject").GetFile(ThisWorkbook.FullName).DateCreated
End Sub
Sub CR_DT()
Debug.Print CreateObject("Scripting.FileSystemObject").GetFile(ThisWorkbook.FullName).DateCreated
End Sub
ЧУДЕСА: при тестировании случайно выяснил, что встроенное свойство файла Creation date почему-то (по крайней мере у меня) возвращает какую-то левую дату в отличие от свойства файла DateCreated, считываемого из файловой системы.
[vba]
Sub Cr_Dat_Compare()
Debug.Print CreateObject("Scripting.FileSystemObject").GetFile(ThisWorkbook.FullName).DateCreated
Debug.Print ThisWorkbook.BuiltinDocumentProperties("Creation date")
End Sub
[/vba]
Специально, чтобы выяснить, в каком встроенном свойстве файла записана дата его создания, наскоро слепил процедурку[vba]
Private Sub BuiltinDocumentProperties_VIEW_ALL() ' просмотр всех имеющихся BuiltinDocumentProperties
Dim DocProp As DocumentProperty, sDocPropVal$
On Error Resume Next
Debug.Print "ThisWorkbook contains " & ThisWorkbook.BuiltinDocumentProperties.Count & " BuiltinDocumentProperties :"
For Each DocProp In ThisWorkbook.BuiltinDocumentProperties
sDocPropVal = "Empty": sDocPropVal = DocProp.Value
Debug.Print DocProp.Name & " usm" src="http://www.excelworld.ru/sml2/cry.jpg" border="0" align="absmiddle" alt=":'(" />
ЧУДЕСА: при тестировании случайно выяснил, что встроенное свойство файла Creation date почему-то (по крайней мере у меня) возвращает какую-то левую дату в отличие от свойства файла DateCreated, считываемого из файловой системы.
[vba]
Sub Cr_Dat_Compare()
Debug.Print CreateObject("Scripting.FileSystemObject").GetFile(ThisWorkbook.FullName).DateCreated
Debug.Print ThisWorkbook.BuiltinDocumentProperties("Creation date")
End Sub
[/vba]
Специально, чтобы выяснить, в каком встроенном свойстве файла записана дата его создания, наскоро слепил процедурку[vba]
Private Sub BuiltinDocumentProperties_VIEW_ALL() ' просмотр всех имеющихся BuiltinDocumentProperties
Dim DocProp As DocumentProperty, sDocPropVal$
On Error Resume Next
Debug.Print "ThisWorkbook contains " & ThisWorkbook.BuiltinDocumentProperties.Count & " BuiltinDocumentProperties :"
For Each DocProp In ThisWorkbook.BuiltinDocumentProperties
sDocPropVal = "Empty": sDocPropVal = DocProp.Value
Debug.Print DocProp.Name & " usm" src="http://www.excelworld.ru/sml2/cry.jpg" border="0" align="absmiddle" alt=":'(" />
Alex_ST
Sub Cr_Dat_Compare()
Debug.Print CreateObject("Scripting.FileSystemObject").GetFile(ThisWorkbook.FullName).DateCreated
Debug.Print ThisWorkbook.BuiltinDocumentProperties("Creation date")
End Sub
[/vba]
Специально, чтобы выяснить, в каком встроенном свойстве файла записана дата его создания, наскоро слепил процедурку[vba]
Private Sub BuiltinDocumentProperties_VIEW_ALL() ' просмотр всех имеющихся BuiltinDocumentProperties
Dim DocProp As DocumentProperty, sDocPropVal$
On Error Resume Next
Debug.Print "ThisWorkbook contains " & ThisWorkbook.BuiltinDocumentProperties.Count & " BuiltinDocumentProperties :"
For Each DocProp In ThisWorkbook.BuiltinDocumentProperties
sDocPropVal = "Empty": sDocPropVal = DocProp.Value
Debug.Print DocProp.Name & " usm" src="http://www.excelworld.ru/sml2/cry.jpg" border="0" align="absmiddle" alt=":'(" />
Автор - Alex_ST
Дата добавления - 28.10.2014 в 10:41
Alex_ST, свойство Creation date excel записывает сразу при создании книги (открытия excel) еще до сохранения и никогда не перезаписывается, свойство файла DateCreated записывается при первом сохранении этого файла. Если открыть старый файл и сохранить его как, то запишется только DateCreated. Вот и вся магия
Alex_ST, свойство Creation date excel записывает сразу при создании книги (открытия excel) еще до сохранения и никогда не перезаписывается, свойство файла DateCreated записывается при первом сохранении этого файла. Если открыть старый файл и сохранить его как, то запишется только DateCreated. Вот и вся магия krosav4ig
В следующем коде иллюстрируется получение объекта File и просмотр одного из его свойств.
Коллекции
Сбор | Описание |
---|---|
Файлы | Возвращает коллекцию всех файлов в указанной папке. |
Методы
Метод | Описание |
---|---|
Копировать | Копирует указанный файл из одного расположения в другое. |
Удаление | Удаляет указанный файл. |
Move | Перемещает указанный файл из одного расположения в другое. |
OpenAsTextStream | Открывает указанный файл и возвращает объект TextStream для доступа к файлу. |
Свойства
Свойство | Описание |
---|---|
Attributes | Задает или возвращает атрибуты указанного файла. |
DateCreated | Возвращает дату и время создания указанного файла. |
DateLastAccessed | Возвращает дату и время последнего доступа к указанному файлу. |
DateLastModified | Возвращает дату и время последнего изменения указанного файла. |
Drive | Возвращает письмо диска, в котором находится указанный файл или папка. |
Название | Задает или возвращает имя указанного файла. |
ParentFolder | Возвращает объект папки для родителя указанного файла. |
Путь | Возвращает путь для указанного файла. |
ShortName | Возвращает короткое имя указанного файла (конвенция именования 8.3). |
ShortPath | Возвращает короткий путь указанного файла (конвенция именования 8.3). |
Размер | Возвращает размер указанного файла в bytes. |
Тип | Возвращает тип указанного файла. |
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
В этом пошаговом руководстве приводятся основные сведения о файловом вводе-выводе в Visual Basic. В нем описывается создание небольшого приложения, перечисляющего текстовые файлы в каталоге и анализирующего их. Для каждого выбранного текстового файла приложение предоставляет атрибуты файла и первую строку содержимого. Кроме того, предоставляется возможность записать информацию в файл журнала.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Создание проекта
В меню Файл выберите пункт Создать проект.
Откроется диалоговое окно Создание проекта .
В области Установленные шаблоны разверните узел Visual Basic и выберите элемент Windows. В середине области Шаблоны щелкните Приложение Windows Forms.
В поле имя введите , чтобы задать имя проекта, и нажмите кнопку ОК.
Visual Studio добавит проект в обозреватель решений, после чего откроется конструктор Windows Forms.
Добавьте в форму элементы управления из приведенной ниже таблицы и установите для их свойств соответствующие значения.
Выбор папки и перечисление файлов в ней
Создайте обработчик событий нажатия Click для кнопки browseButton , дважды щелкнув этот элемент управления в форме. Откроется редактор кода.
Добавьте следующий код в обработчик событий Click .
FolderBrowserDialog1.ShowDialog Вызов открывает диалоговое окно FolderBrowserDialog1.ShowDialog . После нажатия пользователем кнопки ОК свойство отправляется в качестве аргумента ListFiles в метод, который добавляется на следующем шаге.
Добавьте приведенный ниже метод ListFiles .
Этот код сперва очищает элемент ListBox.
Затем метод GetFiles возвращает коллекцию строк — по одной для каждого файла в каталоге. Метод GetFiles принимает аргумент шаблона поиска, чтобы извлечь файлы, соответствующие определенному шаблону. В этом примере возвращаются только файлы с расширением TXT.
Строки, возвращаемые GetFiles методом, затем добавляются в GetFiles .
Элемент ListBox содержит список TXT-файлов в выбранной папке.
Остановите работу приложения.
Получение атрибутов файла и содержимого текстового файла
Создайте обработчик событий нажатия Click для кнопки examineButton , дважды щелкнув этот элемент управления в форме.
Добавьте следующий код в обработчик событий Click .
Этот код проверяет, выбран ли элемент в элементе ListBox . Затем он получает запись пути к файлу из элемента ListBox . Метод FileExists позволяет проверить, существует ли файл.
Путь к файлу передается как аргумент методу GetTextForOutput , который добавляется в следующем шаге. Этот метод возвращает строку, содержащую информацию о файле. Информация о файле отображается в элементе MessageBox.
Добавьте приведенный ниже метод GetTextForOutput .
Метод GetFileInfo используется в коде для получения параметров файла. Параметры файла добавляются в StringBuilder.
Метод OpenTextFileReader считывает содержимое файла в StreamReader. Первая строка содержимого файла извлекается из StreamReader и добавляется в StringBuilder .
Выберите файл в ListBox , а затем нажмите кнопку ListBox . В окне MessageBox будет выведена информация о файле.
Остановите работу приложения.
Добавление записи в журнал
В конец обработчика событий examineButton_Click добавьте приведенный ниже код.
Код задает путь к файлу журнала, чтобы файл журнала помещался в тот же каталог, где находится выбранный файл. Запись журнала должна содержать текущие дату и время, а далее информацию о файле.
Метод WriteAllText, которому передается аргумент append со значением True , используется для создания записи в журнале.
Запустите приложение. Перейдите к текстовому файлу, выберите его в ListBox , установите флажок ListBox и нажмите кнопку проверить. Проверьте, добавлена ли запись в файл log.txt .
Остановите работу приложения.
Использование текущего каталога
Создайте обработчик событий для события Form1_Load , дважды щелкнув форму.
Добавьте в обработчик событий приведенный ниже код.
Этот код задает текущий каталог в качестве каталога по умолчанию для обозревателя папок.
Запустите приложение. При первом нажатии кнопки Обзор открывается диалоговое окно Выбор папки с текущим каталогом.
Остановите работу приложения.
Выборочное включение элементов управления
Добавьте приведенный ниже метод SetEnabled .
Метод SetEnabled включает и отключает элементы управления в зависимости от того, выбран ли элемент в элементе ListBox .
Создайте обработчик событий SelectedIndexChanged для элемента filesListBox , дважды щелкнув элемент управления ListBox в форме.
Добавьте вызов метода SetEnabled в новый обработчик событий filesListBox_SelectedIndexChanged .
Добавьте вызов метода SetEnabled в конце обработчика событий browseButton_Click .
Добавьте вызов метода SetEnabled в конце обработчика событий Form1_Load .
Запустите приложение. Флажок сохранить результаты и кнопка проверить отключены, если элемент не выбран в .
Ниже приведен полный пример.
Полный пример с использованием System.IO
Иногда бывает необходимо заполучить на лист Excel список файлов в заданной папке и ее подпапках. В моей практике такое встречалось неоднократно, например:
- перечислить в приложении к договору на проведение тренинга список файлов из раздаточных материалов для особо щепетильных юристов в некоторых компаниях
- создать список файлов для ТЗ проекта
- сравнить содержимое папок (оригинал и бэкап, например)
Для реализации подобной задачи можно использовать несколько способов.
Способ 1. Скелет из шкафа - функция ФАЙЛЫ
Этот способ использует древнюю функцию ФАЙЛЫ (FILES) , оставшуюся в Microsoft Excel с далеких девяностых. Вы не найдете эту функцию в общем списке функций, но для совместимости, она всё ещё остаётся внутри движка Excel, и мы вполне можем её использовать.
1. В любую ячейку листа (например, в А1) введём путь к папке, список файлов из которой мы хотим получить.
Обратите внимание, что путь должен оканчиваться шаблоном со звездочками:
- *.* - любые файлы
- *.xlsx - книги Excel (только с расширением xlsx)
- *.xl* - любые файлы Excel
- *отчет* - файлы, содержащие слово отчет в названии
2. Создадим именованный диапазон с помощью вкладки Формулы - далее кнопка Диспетчер имен - Создать (Formulas - Names Manger - Create) . В открывшемся окне введем любое имя без пробелов (например Мои_файлы) и в поле диапазона выражение:
После нажатия на ОК будет создан именованный диапазон с именем Мои_файлы, где хранится список всех файлов из указанной в А1 папки. Останется их оттуда только извлечь.
3. Чтобы извлечь имена отдельных файлов из созданной переменной, используем функцию ИНДЕКС (INDEX) , которая в Excel вытаскивает данные из массива по их номеру:
Если лениво делать отдельный столбец с нумерацией, то можно воспользоваться костылем в виде функции СТРОКИ (ROWS) , которая будет подсчитывать количество заполненных строк с начала списка автоматически:
=ИНДЕКС(Мои_файлы; ЧСТРОК($B$3:B3) )
= ЕСЛИОШИБКА( ИНДЕКС(Мои_файлы; ЧСТРОК($B$3:B3)) ; "")
Важное примечание : формально функция ФАЙЛЫ относится к макро-функциям, поэтому необходимо будет сохранить ваш файл в формате с поддержкой макросов (xlsm или xlsb).
Способ 2. Готовый макрос для ленивых
Если вы знакомы с макросами (не в смысле их программирования, а в смысле копипастинга готовых кодов на VBA), то вам, возможно, отлично зайдёт небольшой макрос, добавляющий в текущую книгу новый пустой лист и выводящий на него список всех файлов с их параметрами из заданной пользователем папки.
Для добавления макроса в вашу книгу нажмите сочетание клавиш Alt + F11 , или кнопку Visual Basic на вкладке Разработчик (Developer) , в открывшемся окне редактора Visual Basic вставьте новый модуль через меню Insert - Module и скопируйте туда текст этого макроса:
Для запуска макроса нажмите сочетание клавиш Alt + F8 ,или кнопку Макросы (Macros) на вкладке Разработчик (Developer) , выберите наш макрос FileList и нажмите кнопку Выполнить (Run) . В диалоговом окне выберите любую папку или диск и - вуаля!
Если захотите, чтобы вместо пути к файлу в столбце B выводилась живая гиперссылка, то замените 52-ю строку
Cells(r, 2).Formula = FileItem.Path
Cells(r, 2).Formula = "=HYPERLINK(""" & FileItem.Path & """)"
Способ 3. Мощь и красота - надстройка Power Query
Power Query - это очень мощная и при этом бесплатная надстройка для Excel от Microsoft, упрощающая множество задач по загрузке и трансформации данных. В нашей ситуации она тоже может здорово помочь.
Если у вас Excel 2016 или новее, то Power Query уже встроена в Excel по умолчанию, поэтому просто на вкладке Данные выберите команду Создать запрос / Получить данные - Из файла - Из папки (Create Query / Get Data - From file - From folder) . Если у вас Excel 2010-2013, то Power Query нужно будет скачать с сайта Microsoft и установить как отдельную надстройку и она появится у вас в Excel в виде отдельной вкладки Power Query. На ней будет аналогичная кнопка Из файла - Из папки (From file - From folder) .
В открывшемся окне нужно будет указать папку, содержимое которой мы хотим получить. После нажатия на ОК Power Query обшарит указанную папку и все вложенные подпапки и выдаст на экран окно с предварительным просмотром результатов:
Если внешний вид списка вас устраивает, то можно смело жать внизу кнопку Загрузить (Load) , чтобы залить эти данные на новый лист. Если же хочется дополнительно обработать список (удалить лишние столбцы, отобрать только нужные файлы и т.п.), то нужно выбрать команду Изменить / Преобразовать данные (Edit / Transform Data).
Поверх окна Excel откроется окно редактора Power Query, где мы увидим список всех наших файлов в виде таблицы:
Дальше возможны несколько вариантов:
-
Если нужны только файлы определенного типа, то их можно легко отобрать с помощью фильтра по столбцу Extension:
После того, как необходимые файлы отобраны, можно смело удалить ненужные столбцы, щелкнув по заголовку столбца правой кнопкой мыши и выбрав команду Удалить (Remove column ) . Это, кстати, уже никак не повлияет на фильтрацию или сортировку нашего списка:
Если в будущем планируется подсчитывать количество файлов в каждой папке (например, для контроля поступивших заявок или подсчета статистики по заявкам), то имеет смысл дополнительно сделать ещё пару действий:
- Щелкните правой кнопкой мыши по столбцу Folder Path и выберите команду Дублировать столбец (Duplicate Column) .
- Выделите скопированный столбец и на вкладке Преобразование (Transform) выберите Разделить столбец - По разделителю (Split Column - By delimiter)
Мы получим рядом с нашими данными еще несколько столбцов, где будут продублированы имена вложенных папок - это пригодится нам чуть позже для подсчета статистики с помощью сводной таблицы:
Получившиеся столбцы можно переименовать (Диск, Папка1, Папка2 и т.д.), просто щёлкнув дважды по заголовку каждого.
И, наконец, когда список готов, то его можно выгрузить на лист с помощью команды Главная - Закрыть и загрузить - Закрыть и загрузить в. (Home - Close & Load - Close & Load to. ) :
И, само-собой, теперь можно построить по нашей таблице сводную (вкладка Вставка - Сводная таблица), чтобы легко подсчитать количество файлов в каждой папке:
Дополнительным бонусом можно сделать еще один столбец с функцией ГИПЕРССЫЛКА (HYPERLINK) , которая создаст красивые стрелочки-ссылки для моментального перехода к каждому файлу:
Мелочь, а приятно :)
И вдвойне приятно, что в будущем, при изменении содержимого исходной папки, достаточно будет просто щелкнуть мышью по нашей таблице и выбрать команду Обновить (Refresh) - и Power Query выполнит всю цепочку запрограммированных нами единожды действий уже автоматически, отобразив все изменения в составе папки.
Информация о сайте
Инструменты и настройки
Excel Windows
и
Excel Macintosh
Вопросы и решения
Работа и общение
Работа форума и сайта
Функции листа Excel
= Мир MS Excel/Справочники
Все функции VBA [3] |
Математические функции [14] |
Функции обработки массивов [4] |
Функции обработки строк [27] |
Функции преобразования типа данных [11] |
Функции загрузки данных [8] |
Функции работы с файлами [12] |
Функции обработки системных параметров [16] |
Функции обработки цвета [2] |
Функции работы с датами и временем [21] |
Функции преобразования чисел в разные системы счисления [3] |
Функции работы с объектами [4] |
Финансовые функции [13] |
Функции форматирования [5] |
Функции работы с указателями [3] |
Функция FileDateTime
Функция FileDateTime позволяет узнать дату и время последней модификации файла. Перед вызовом функции есть смысл проверить существование файла с помощью функции Dir. Если файл с момента своего создания не модифицировался, время и дата последней модификации совпадают со временем и датой создания файла
Возвращаемое значение
Возвращает значение типа Variant(Date) , содержащее дату и время последней модификации файла
Читайте также: