82本目 ドキュメントプロパティの取得

VBA100本ノック

VBA100本ノック 82本目の投稿です。Excelの神髄さんの模範解答はコチラ


問題

フォルダ内の全てのExcelファイルについて、
以下の情報(ドキュメントプロパティ等)を取得し、
シートへ出力してください。
A列:ファイル名
B列:作成者
C列:更新者
D列:作成日時
E列:更新日時
F列:最終印刷日
G列:サイズ
※フォルダおよび出力シートは任意

↓イメージ

解答

Option Explicit

Sub ノック82本目()

    Dim ws As Worksheet: Set ws = Sheets("Sheet1")
    Dim fso As New FileSystemObject
    Dim f As File
    Dim i As Long: i = 2
    Dim wb As Workbook '起動が必要
    On Error Resume Next
    
    For Each f In fso.GetFolder(ThisWorkbook.Path & "\テスト").Files
        If fso.GetExtensionName(f) Like "xls*" Then
            Set wb = Workbooks.Open(f, , True) ' ドキュメント取得のため開く
            ws.Cells(i, 1).Value = f.Name
            ws.Cells(i, 2).Value = wb.BuiltinDocumentProperties("Author") '著者
            ws.Cells(i, 3).Value = wb.BuiltinDocumentProperties("Last author") '更新者
            ws.Cells(i, 4).Value = wb.BuiltinDocumentProperties("Creation date") '作成日時
            ws.Cells(i, 5).Value = wb.BuiltinDocumentProperties("Last save time") '更新日時
            ws.Cells(i, 6).Value = wb.BuiltinDocumentProperties("Last print date") '最終印刷日時 印刷してないとエラー
            ws.Cells(i, 7).Value = f.Size
            i = i + 1
            wb.Close ' 閉じる
        End If
    Next

End Sub


フォルダ内の全てのファイルをループする方法は
FSOさんを使えば楽勝でしたね。


ファイル→”f”と定義する派です。
皆さんはどう指定しますか?


新人君
新人君

FSOさんが至る所で
活躍できますね!

ブチョ
ブチョ

まるで俺みたいだな!

新人君
新人君

・・・まぁ、ある意味…

全ファイルをループする中、Excelファイルのみに処理する方法については、
拡張子が”xls*”かどうかで判断。

FSOさんのGetExtensionName…拡張子のみを取得

Workbook.BuiltinDocumentProperties プロパティ

指定したブックのすべての組み込みドキュメントプロパティを表す
DocumentPropertiesコレクションを返す。 読み取り専用。

今回初めてだったので、使い方を一から解説してみました。

インデックス、プロパティ名どちらで指定してもいいとは思いますが
近くにコメントつけておいた方がいいかなw さすがに。


ちなみに神髄さんのサイトにインデックス、プロパティ名、和名一覧があるので
はい、神。

ブチョ
ブチョ

さすが神髄さんだね!

新人君
新人君

ブックマーク必須っすね!

ブチョ
ブチョ

いや、俺は都度調べるけど?
その方が他にもいろんなページ見れて
勉強になるし?

新人君
新人君

急になんやこいつ……

あとがたり

おはこんばんちは。uぷ主です。
82本目、様々なドキュメントプロパティを取得する問題でした。

“全フォルダ”や”全ファイル”と聞くと、FSOさんしか使わなくなってきたこの頃です。
昔はその都度検索して、DirやFSOさん(もしくは両方)が混在したコード書いてました。

成長したなぁ…

100本ノックの中でも特に印象に強く残ってる問題がいくつかありますが、
その中の一つが20本目、FSOさんを初めて使った問題です。

是非そちらも見てください。
どえらいことやってますんで。

さて、おそらく今日のメインの
Workbook.BuiltinDocumentPropertiesプロパティさんについてですが…

これも恥ずかしながら初見でした。
たぶんこれまでに一度は使ったことあったはずなんですが…。

いつも、「VBA 作成者 取得」とか、「VBA 更新日時 取得」とかで調べて、
テキトーにコピペしてしか使ってなかったのでw
今回 BuiltinDocumentProperties の一覧を見れたので、ある程度何が取得できるかは目星ついたかな。
これからは実務でも使うこと増えそうです。

今回も非常に勉強になりました!
ありがとうございました!!

そして最後までご視聴ありがとうございました。

コメント

タイトルとURLをコピーしました