VBA練習問題
VBA100本ノック 82本目:ブックのドキュメントプロパティを取得

VBAを100本の練習問題で鍛えます
最終更新日:2021-02-22

VBA100本ノック 82本目:ブックのドキュメントプロパティを取得


フォルダ内の全エクセルファイルのドキュメントプロパティを取得する問題です。


ツイッター連動企画です。
ツイートでの見やすさを考慮して、ブック・シート指定等を適宜省略しています。

VBAテスト用のサンプルデータは、VBA100本ノックの目次ページ からもダウンロードできます。
マクロVBAを初心者向けの基本から上級者向けの高度な内容までサンプルコードを掲載し解説しています。エクセル関数・機能・基本操作の入門解説からマクロVBAまでエクセル全般を網羅しています。


出題

出題ツイートへのリンク

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

マクロ VBA 100本ノック

マクロ VBA 100本ノック


サンプルファイルです。
https://excel-ubara.com/vba100sample/VBA100_82.xlsm
https://excel-ubara.com/vba100sample/VBA100_82.zip


頂いた回答

解説

Officeファイルのプロパティを取得するにはBuiltinDocumentPropertiesを使います。
ファイルを開いて何かするわけではないので、別プロセスで読み込むようにしてみました。
読み取り専用やリンク更新を止めて、なるべく問題なく開けるようにしています。

Sub VBA100_83_01()
  Dim ws As Worksheet: Set ws = ActiveSheet
  ws.Range("A1").CurrentRegion.Offset(1).ClearContents
  
  Dim sPath As String
  With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = ws.Parent.Path & "\"
    If Not .Show Then Exit Sub
    sPath = .SelectedItems(1) & "\"
  End With
  
  Dim fso As New Scripting.FileSystemObject
  Dim objFile As File
  
  Dim xlApp As New Excel.Application
  xlApp.EnableEvents = False
  xlApp.DisplayAlerts = False
  
  Dim wb As Workbook
  Dim i As Long, ary(1 To 7)
  i = 2
  
  On Error Resume Next
  For Each objFile In fso.GetFolder(sPath).Files
    If fso.GetExtensionName(objFile.Path) Like "xls*" Then
      Set wb = xlApp.Workbooks.Open(Filename:=objFile.Path, _
                     UpdateLinks:=0, _
                     ReadOnly:=True, _
                     CorruptLoad:=xlRepairFile)
      ary(1) = objFile.Name
      ary(2) = wb.BuiltinDocumentProperties.Item(3)  '"Author"
      ary(3) = wb.BuiltinDocumentProperties.Item(7)  '"Last author"
      ary(4) = wb.BuiltinDocumentProperties.Item(11) '"Creation date"
      ary(5) = wb.BuiltinDocumentProperties.Item(12) '"Last save time"
      ary(6) = wb.BuiltinDocumentProperties.Item(10) '"Last print date"
      ary(7) = objFile.Size
      ws.Cells(i, 1).Resize(, 7) = ary
      wb.Close False
      i = i + 1
    End If
  Next
  
  xlApp.Quit
  Set xlApp = Nothing
  Set fso = Nothing
  MsgBox "完了"
End Sub


印刷していない場合は印刷日の取得でエラーになってしまいます。
また、サイズだけは別途取得する必要があるのがどうも面倒ですよね。
BuiltinDocumentPropertiesのインデックスおよびプロパティ名については、補足に記載しました。


sPath = .SelectedItems(1) & "\"
この、& "\"、これはなくても良いです。


補足

プロパティの一覧だけ掲載しておきます。
使い方等については、この下の関連ページを参照してください。

プロパティ一覧
インデックス プロパティ名 和名
1 Title タイトル
2 Subject 件名
3 Author 著者
4 Keywords キーワード
5 Comments コメント
6 Template テンプレート
7 Last author 最後の作者
8 Revision number 改訂番号
9 Application name アプリケーション名
10 Last print date 最終印刷日
11 Creation date 作成日
12 Last save time 最終保存時間
13 Total editing time 合計編集時間
14 Number of pages ページ数
15 Number of words 言葉の数
16 Number of characters 文字数
17 Security セキュリティ
18 Category カテゴリー
19 Format フォーマット
20 Manager 部長
21 Company 会社
22 Number of bytes バイト数
23 Number of lines 行数
24 Number of paragraphs 段落数
25 Number of slides スライド数
26 Number of notes ノート数
27 Number of hidden Slides 隠しスライドの数
28 Number of multimedia clips マルチメディアクリップの数
29 Hyperlink base ハイパーリンクの基点
30 Number of characters (with spaces) 文字数(スペースを含む)
31 Content type コンテンツタイプ
32 Content status コンテンツステータス
33 Language 言語
34 Document version 文書バージョン


サイト内関連ページ

ドキュメントプロパティ(BuiltinDocumentProperties,CustomDocumentProperties)
ブックのドキュメントプロパティには、組み込みドキュメントプロパティとユーザー設定のドキュメントプロパティがあります。VBAで扱うときは、それぞれ以下のコレクション・オブジェクトを使います、BuiltinDocumentProperties, CustomDocumentProperties これらは、
第119回.ファイルシステムオブジェクト(FileSystemObject)|VBA入門
FileSystemObjectオブジェクトでは、コンピュータのファイルシステムへのアクセスが提供されています。VBAに用意されているファイル操作関連のステートメントや関数より、より強力で、より多くの機能が搭載されています。ただし機能が大変多いため、これらを全て覚えるという事は困難です。




同じテーマ「VBA100本ノック」の記事

80本目:読み取り専用で保存できないブックにする
81本目:全フィルターの絞り込解除
81本目:全フィルターの絞り込解除
82本目:ブックのドキュメントプロパティを取得
83本目:請求書を作成してPDF出力
84本目:ブックの自動バックアップ
85本目:請求日から入金予定日を算出
86本目:全シートの総当たり表を作成
87本目:数式のシート間の依存関係
88本目:クロスABC分析作成
89本目:2つのフォルダの統合


新着記事NEW ・・・新着記事一覧を見る

キーボード操作だけで非表示列を表示|エクセル雑感(2021-05-11)
変数を考えることはロジックを考える事|エクセル雑感(2021-04-11)
RangeオブジェクトのFor EachとAreasについて|VBA技術解説(2021-04-08)
PropertyのSetはLetでも良い|VBA技術解説(2021-03-31)
エクセル麻雀ミニゲーム|VBAサンプル集(2021-03-09)
VBA100本ノック 100本目:WEBから100本ノックのリストを取得|VBA練習問題(2021-03-03)
VBA100本ノック 魔球編:2桁の最小公倍数|VBA練習問題(2021-02-02)
Select Caseでの短絡評価(ショートサーキット)の使い方|VBA技術解説(2021-01-03)
VBA100本ノック 迷宮編:巡回セル問題|VBA練習問題(2020-12-31)
VBA100本ノック 魔球編:閉領域の塗り潰し|VBA練習問題(2020-12-16)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.Excelショートカットキー一覧|Excelリファレンス
3.RangeとCellsの使い方|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.ひらがな⇔カタカナの変換|エクセル基本操作
8.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
9.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
10.セルに文字を入れるとは(Range,Value)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ