Excel VBAを使用して、拡張属性を含むすべてのファイル属性をディスク上のファイルからキャプチャしようとしています。ファイルをループ処理し、基本的な属性(ファイルシステムから取得)をキャプチャすることができました。
また、ファイル自体に由来する拡張プロパティをキャプチャしたいと思います。
ファイルを右クリックすると表示されるその他のプロパティ。
目標は、ファイルサーバー上のすべてのファイルの詳細なリストを作成することです。
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
これは.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