vbaでオフィスファイル(wordやexcel)などのプロパティからコメントを取得する方法がさっぱりわからず、質問させていただきました。設計書にはbuiltindocumentpropertiesを使ってオフィスファイルからコメントを取得するようにかいてあったので、builtindocumentpropertiesを使ってコメントを取得したいです。
また、拡張子、ファイル名がtmp、temp、bk、bakを含むファイルを大文字または小文字どちらの場合でも除外できる方法も知りたいです。ifのネストで記述していたのですがこれだと可読性が低くなるというご指摘がありました。ifのネスト以外でファイル名や拡張子を判定する処理をfunctionプロシージャを使って処理したいです。
お手数をおかけして申し訳ございませんがわかる方よろしくお願いします。
vba
1Option Explicit 2Sub サブフォルダ含むファイルデータ取得() 3 Dim intIchi As Integer 4 Dim strPath As String 5 6 intIchi = 2 '開始行 7 8 strPath = Worksheets("保管場所").Range("B3").Value 'ファイルパス取得 9 10 Sheets("ファイル一覧").Select ’シート選択 11 12 Call ファイル名取得(strPath, intIchi) 13 Call 空欄削除 14 Call 連番挿入 15End Sub 16 17Sub ファイル名取得(strPath As String, intIchi As Integer) 18 Dim objFSO As Object, objFile As Object, objsubFolder 'オブジェクト定義 19 Dim intIchi As Integer 20 Dim strPath As String 21 Dim vntpos As Variant 22 Dim vntfolderpathcontainer As Variant 23 Dim vntfolderpathcontainer2 As Variant 24 25 Set objFSO = CreateObject("Scripting.FileSystemObject") 'インスタンスの作成 26 27 For Each objFile In objFSO.GetFolder(strPath).Files 28 vntpos = InStrRev(objFile.Path, "\") ’ファイルパス検索 29 vntfolderpathcontainer = Left(objFile.Path, vntpos - 1) ’フォルダパス切り出し 30 vntpos = InStrRev(vntfolderpathcontainer, "\") ’フォルダパス検索 31 vntfolderpathcontainer2 = Mid(vntfolderpathcontainer, vntpos + 1) ’フォルダ切り出し 32 Worksheets("ファイル一覧").Cells(intIchi, 1) = objFSO.GetBaseName(objFile.Path) '拡張子なしのファイル名 33 Worksheets("ファイル一覧").Cells(intIchi, 2) = objFile.DateCreated 'ファイル作成日 34 Worksheets("ファイル一覧").Cells(intIchi, 3) = objFile.DateLastModified 'ファイル更新日 35 Worksheets("ファイル一覧").Cells(intIchi, 4) = "" 'コメント 36 Worksheets("ファイル一覧").Hyperlinks.Add Anchor:=Cells(intIchi, 5), Address:=objFile.Path, TextToDisplay:=objFile.Name 'ファイル名ハイパーリンク 37 Worksheets("ファイル一覧").Hyperlinks.Add Anchor:=Cells(intIchi, 6), Address:=strPath, TextToDisplay:=vntfolderpathcontainer2 'フォルダ名ハイパーリンク 38 intIchi = intIchi + 1 39 Next 40 41 For Each objsubFolder In objFSO.GetFolder(strPath).SubFolders 42 Call ファイル名取得(objsubFolder.Path, intIchi) 43 Next 44 45 Set objFSO = Nothing 46 Set objsubFolder = Nothing 47 Set objFile = Nothing 48End Sub 49 50Sub 空欄削除() 51 Dim ListLastRow As Long 52 Dim DeleteRows As Range 53 Dim ws As Worksheet 54 Dim i As Long 55 56 57 Set ws = Worksheets("ファイル一覧") '対象シート 58 ListLastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row 'A列を見て最終行を取得 59 60 61 For i = 2 To ListLastRow '2行目から探査 62 If IsEmpty(ws.Cells(i, 1)) Then 'Rangeに削除対象行を格納 63 If DeleteRows Is Nothing Then 64 Set DeleteRows = ws.Rows(i).EntireRow 65 Else 66 Set DeleteRows = Union(DeleteRows, ws.Rows(i).EntireRow) 67 End If 68 End If 69 Next 70 71 72 If Not DeleteRows Is Nothing Then DeleteRows.Delete '削除対象行が1つでもあれば行削除を実施 73 74End Sub 75 76Sub 連番挿入() 77 Dim ListLastRow As Long 78 Dim i As Long 79 Dim number As Long 80 Dim ws As Worksheet 81 82 Columns("A").Insert 83 number = 1 84 Set ws = Worksheets("ファイル一覧") 85 86 ListLastRow = ws.Range("B2").End(xlDown).Row 87 88 For i = 2 To ListLastRow 89 Cells(i, 1) = number 90 number = number + 1 91 Next 92End Sub 93
回答2件
あなたの回答
tips
プレビュー