Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows XP全般 : Excel 2003)
ファイルの各種属性取得の方法
投稿日時: 19/04/23 12:06:01
投稿者: 富山の初心者

お願いします。
下記、コーディングにより
ファイル名/更新日を取得できますが、
タイトル/コメント/説明なども取得する方法を教えてください。
 
もっと、細かいことを要望としては、
エクスプローラで表示有無を設定できる全項目の取得方法(指定方法)がわかれば、
使用時に当方で取捨選択しますので、よろしくお願いします。
 
本コーディングにこだわらず大幅に変えても構いません。
 
以下コーディング

Option Explicit

Sub TEST()

Dim objFso      As FileSystemObject
Dim objPath     As Folder
Dim objFile     As File
Dim lngLine     As Long

    lngLine = 1
    
    Set objFso = New FileSystemObject
    Set objPath = objFso.GetFolder("C:\ABC\")
    
    For Each objFile In objPath.Files
        With objFile
            lngLine = lngLine + 1
            Cells(lngLine, 1).Value = .Name              'ファイル名
            Cells(lngLine, 2).Value = .DateLastModified  '更新日
            Cells(lngLine, 3).Value = .?????             'ここのコーディングが知りたい
            Cells(lngLine, 4).Value = .?????             'ここのコーディングが知りたい
            Cells(lngLine, 5).Value = .?????             'ここのコーディングが知りたい
        End With
    Next

    Set objPath = Nothing
    Set objFso = Nothing

End Sub

 

回答
投稿日時: 19/04/23 13:18:23
投稿者: たかみ

Excelのブックのプロパティの一覧を取得する方法でしたら、以下のサイト様にそのものズバリのサンプルコードが公開されています。
丁寧な解説もしてくださっていますので、こちらをご覧ください。
http://officetanaka.net/excel/vba/tips/tips122.htm

回答
投稿日時: 19/04/23 14:07:03
投稿者: sk

引用:
下記、コーディングにより
ファイル名/更新日を取得できますが、
タイトル/コメント/説明なども取得する方法を教えてください。

引用:
もっと、細かいことを要望としては、
エクスプローラで表示有無を設定できる全項目の取得方法(指定方法)がわかれば、
使用時に当方で取捨選択しますので、よろしくお願いします。

ファイルの種類が Excel ブックに限定されるか否か次第では。

回答
投稿日時: 19/04/23 17:30:15
投稿者: Nao

こんにちは。
取敢えず、エクスプローラで表示有無を設定できる全項目の取得。
 

Option Explicit

Sub TEST()
Dim objShell    As Object
Dim objFolder   As Object
Dim varFileName As Variant
Dim lngLine     As Long
Dim i           As Long

    lngLine = 1
    
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace("C:\ABC\")
    
    'プロパティ項目名を1行目に
    For i = 0 To 292       '※ Excel 2003 であれば 255 に変更(列数の関係で)
        Cells(1, i + 1).Value = objFolder.GetDetailsOf(objFolder.Items, i)
    Next
    
    For Each varFileName In objFolder.Items
        If objFolder.GetDetailsOf(varFileName, 2) <> "ファイル フォルダー" Then
            lngLine = lngLine + 1
            For i = 0 To 292   '※ Excel 2003 であれば 255 に変更(列数の関係で)
                Cells(lngLine, i + 1).Value = objFolder.GetDetailsOf(varFileName, i)
            Next
        End If
        DoEvents
    Next

    Set objFolder = Nothing
    Set objShell = Nothing
End Sub

(Windows XP全般 : Excel 2003)
Excel 2003 の場合、上記コードでは以下の項目が取得できません。
必要に応じて修正してください。
 
256 : 再放映
257 : SAP
258 : 放送日
259 : プログラムの説明 
260 : 記録時間
261 : ステーション コール サイン
262 : 局名
263 : 概要
264 : 抜粋
265 : 自動要約
266 : 検索のランキング
267 : 秘密度
268 : 共有ユーザー
269 : 共有状態
270 : 製品名
271 : 製品バージョン
272 : サポートのリンク
273 : ソース
274 : 開始日
275 : 課金情報
276 : 完了
277 : 仕事の所有者
278 : 総ファイル サイズ
279 : 商標
280 : ビデオ圧縮
281 : ディレクター
282 : データ速度
283 : フレーム高
284 : フレーム率
285 : フレーム幅
286 : 総ビット レート
287 :
288 :
289 :
290 :
291 : Masters Keywords (debug)
292 : Masters Keywords (debug)
 
 

投稿日時: 19/04/23 21:14:01
投稿者: 富山の初心者

たかみ 様
sk 様
Nao 様 ありがとうございます。
 
たかみ様の情報のホームページは参考になりました。
Nao様のコーディングも参考になりました。
上記のいずれもためしてみて、うまくいきました。が、
 
sk様の疑問にありました、
「ファイルの種類が Excel ブックに限定されるか否か次第では。」については、
ブック以外を想定していましたので、
ブック以外の回答も待ちしたいと思います、ので、
解決とはせずに、もうしばらく、まってみます。
 
 
 

回答
投稿日時: 19/04/23 22:27:32
投稿者: simple

引用:
もっと、細かいことを要望としては、
エクスプローラで表示有無を設定できる全項目の取得方法(指定方法)がわかれば、
使用時に当方で取捨選択しますので、よろしくお願いします。
それがNaoさんの回答だと思いますが?

投稿日時: 19/04/23 22:46:23
投稿者: 富山の初心者

たかみ 様
sk 様
Nao 様 ありがとうございます。
  
ブック以外も確認しましたら、
想定していた結果となりましたので、
解決とさせていただきます。