web-dev-qa-db-ja.com

VBAを使用して拡張ファイル属性を取得する

Excel VBAを使用して、拡張属性を含むすべてのファイル属性をディスク上のファイルからキャプチャしようとしています。ファイルをループ処理し、基本的な属性(ファイルシステムから取得)をキャプチャすることができました。

  • ファイルパス
  • ファイル名
  • ファイルサイズ
  • 作成日
  • 最終アクセス日
  • 最終更新日
  • ファイルタイプ

また、ファイル自体に由来する拡張プロパティをキャプチャしたいと思います。

  • 著者
  • キーワード
  • コメント
  • 最後の著者
  • カテゴリー
  • Subject

ファイルを右クリックすると表示されるその他のプロパティ。

目標は、ファイルサーバー上のすべてのファイルの詳細なリストを作成することです。

21
Jim McKeeth

Loop ..と言うので、現在のドキュメントではなくディレクトリに対してこれを行いたい場合は、

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
24
Alex K.

これは.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 を使用する必要があります。

8
Todd Main
'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
3
Jorge Gudiño