Использование VBA для получения расширенных атрибутов файла

Попытка использовать Excel VBA для захвата всех атрибутов файла из файлов на диске , включая расширенные атрибуты. Он смог заставить его зациклиться на файлах и захватить основные атрибуты (которые поступают из файловой системы):

  • Путь к файлу
  • Имя файла
  • Размер файла
  • Дата создания
  • Дата последнего доступа
  • Дата последнего изменения
  • Тип файла

Также хотел бы захватить расширенные свойства, которые поступают из самого файла:

  • автор
  • Ключевые слова
  • Комментарии
  • Последний автор
  • категория
  • Предмет

И другие свойства, которые видны при щелчке правой кнопкой мыши по файлу.

objective состоит в том, чтобы создать подробный список всех файлов на файловом сервере.

Вы говорите цикл … так что если вы хотите сделать это для каталога вместо текущего документа;

Dim sFile As Variant Dim oShell: Set oShell = CreateObject("Shell.Application") Dim oDir: Set oDir = oShell.Namespace("c:\foo") For Each sFile In oDir.Items Debug.Print oDir.GetDetailsOf(sFile, XXX) Next 

Где XXX – индекс столбца атрибуции, например 9 для автора. Чтобы перечислить доступные индексы для вашей справки, вы можете заменить цикл for;

 for i = 0 To 40 debug.? i, oDir.GetDetailsOf(oDir.Items, i) Next 

Быстро для одного файла / атрибута:

 Const PROP_COMPUTER As Long = 56 With CreateObject("Shell.Application").Namespace("C:\HOSTDIRECTORY") MsgBox .GetDetailsOf(.Items.Item("FILE.NAME"), PROP_COMPUTER) End With 

Вы можете получить это с помощью .BuiltInDocmementProperties .

Например:

 Public Sub PrintDocumentProperties() Dim oApp As New Excel.Application Dim oWB As Workbook Set oWB = ActiveWorkbook Dim title As String title = oWB.BuiltinDocumentProperties("Title") Dim lastauthor As String lastauthor = oWB.BuiltinDocumentProperties("Last Author") Debug.Print title Debug.Print lastauthor End Sub 

См. Эту страницу для всех полей, к которым вы можете получить доступ: http://msdn.microsoft.com/en-us/library/bb220896.aspx

Если вы пытаетесь сделать это за пределами клиента (т.е. с закрытым и выполняемым кодом Excel, скажем, с помощью .NET-программы), вам необходимо использовать DSOFile.dll .

 'vb.net 'Extended file stributes 'visual basic .net sample Dim sFile As Object Dim oShell = CreateObject("Shell.Application") Dim oDir = oShell.Namespace("c:\temp") For i = 0 To 34 TextBox1.Text = TextBox1.Text & oDir.GetDetailsOf(oDir, i) & vbCrLf For Each sFile In oDir.Items TextBox1.Text = TextBox1.Text & oDir.GetDetailsOf(sFile, i) & vbCrLf Next TextBox1.Text = TextBox1.Text & vbCrLf Next 
  • В чем разница между VBA 6.0 и VBA 7.0?
  • Не удалось выполнить метод ShowAllData classа Worksheet
  • Экспорт форм доступа MS и classов / модhive Рекурсивно в текстовые файлы?
  • Откройте книгу с помощью FileDialog и обработайте ее в Excel VBA
  • Как увеличить высоту строки в Excel с помощью X. Т.е. Добавить вертикальное заполнение ячейки
  • VBA - как условно пропустить итерацию цикла for
  • В Excel VBA, как проверить, полностью ли загружена веб-страница?
  • В чем разница между Dim, Global, Public и Private в качестве модификаторов модульного поля?
  • Ошибка времени выполнения '91' (переменная объекта или с не заданной переменной блока)
  • Оператор VBA «И» оценивает второй аргумент, когда первый является ложным?
  • Как автоматически вставить пустую строку после группы данных
  • Давайте будем гением компьютера.