みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAでBOOKを開かずにプロパティ変更

エクセル2013です。
特定のフォルダ内のエクセルのBOOKのプロパティの作成者をすべて変えようと思います。
いろいろ試して、以下のコードでできるようになりました。
しかし、下記のコードではいちいちファイルを開かなくてはなりませんのでサイズが大きかったり、数が多いと結構時間がかかります。
手作業でファイルのプロパティを変えるときは、エクスプローラで右クリックすれば開かなくとも簡単にできます。VBAでもファイルを開かずにプロパティを変更するにはどうすればよいのでしょうか?お教えいただければ幸いです。

Sub TEST20190710()
  Dim myFdr As String, fnm As String
  Dim wb As Workbook
  Dim n As Long
  Const NEW_AUTHOR As String = "emaxemax"
  
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  myFdr = "C:\Users\User\Documents\TEST01"
  fnm = Dir(myFdr & "\*.xls?")
  Do Until fnm = Empty
    Set wb = Workbooks.Open(myFdr & "\" & fnm)
    Application.DisplayAlerts = False
    wb.BuiltinDocumentProperties("Author").Value = NEW_AUTHOR
    wb.Close SaveChanges:=True
    Application.DisplayAlerts = True
    n = n + 1
    fnm = Dir
  Loop
  Application.ScreenUpdating = True
  Application.EnableEvents = True
  MsgBox n & "件のブックを処理しましました。", vbInformation
End Sub

投稿日時 - 2019-07-10 12:05:27

QNo.9633885

困ってます

質問者が選んだベストアンサー

VBAではやったことがなく、また思いつきませんが
単に作成者を一括して修正したいだけであれば
添付画像のように、
エクスプローラーでできると思います。

なお、変更前の作成者にばらつきがある場合は
同じものごとに束ねて行う必要があるかもしれません。
その場合は、表示する列に作成者を追加し
並べ替えることでやり繰りできるはずです。

投稿日時 - 2019-07-10 13:39:07

お礼

HohoPapa さん、いつもお世話になりありがとうございます。
なるほど。全部選択して一括で変更できるとは存じませんでした。
とても勉強になりました。ありがとうございます。
ただ、できればVBAでのやりかたもできれば知りたいと思います。(作成者の変更以外にいろいろありますので)

投稿日時 - 2019-07-10 17:38:31

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

VBAコアな機能より、FSOを使うことを考えた方がよいのでは。
ーー
適当な実例がないので、「設定」の方のテストをしてないが、参考に。
まずファイルプロパティ情報の「取得」で、WEB記事からのそっくり引用ですが
Sub sample() 'OK
Dim i As Long
Dim strFile As String
Dim strPath As String
Dim obj As Object
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\"
.AllowMultiSelect = False
.Title = "フォルダの選択"
If .Show = False Then
Exit Sub
End If
strPath = .SelectedItems(1) & "\"
End With

Application.EnableEvents = False '起動時のOpenイベント等を停止
On Error Resume Next 'GetObjectで取得できないファイルの対策
strFile = Dir(strPath)
i = 2
Do While strFile <> ""
Cells(i, 1) = strFile 'ファイル名
Cells(i, 2) = FileDateTime(strPath & strFile) '更新日時
Cells(i, 3) = FileLen(strPath & strFile) 'サイズ
Set obj = GetObject(strPath & strFile)
If Err.Number <> 0 Then
'Officeのドキュメントではないということ
Err.Clear
Else
Cells(i, 4).Value = obj.BuiltinDocumentProperties(3) 'Author
Cells(i, 5).Value = obj.BuiltinDocumentProperties(7) 'Last Author
obj.Close
End If
strFile = Dir()
i = i + 1
Loop
Set obj = Nothing
Application.EnableEvents = True
End Sub
これは、エクセル・シートに情報を書き出すのはテスト済み。
このコードではそのファイル(ブック)を開いてはいるが、画面に出してない、と思う。処理時間が少なくて済むようだ。
ーー
もう一つWEB記事
https://excelwork.info/excel/builtindocumentproperties/

<設定>
object.BuiltinDocumentProperties ( title ) = string
という解説を注目して、その後の
「サンプルVBAソース」を参考にして、
前記の情報「参照」のコードの例えば、
Cells(i, 4).Value = obj.BuiltinDocumentProperties(3) 'Authorのところを
obj.BuiltinDocumentProperties(3)=”山田 太郎"
のように、「設定」にして、実行してみてはどうだろう。
そして、前記のコードで、「変更」設定を確認すると安心です。

投稿日時 - 2019-07-10 17:49:36

お礼

お礼がおそくなり申し訳ありません。
(寝込んでました)
FSOでも開いて保存であることにかわりませんがありがとうございました。
その前にもっと問題が発生してしまいました。
わたしにコードでもimogasiさんのコードで「設定」にしたものでもプロパティが変更できないファイルがいくつかあるのです。現在原因を探っていますのでこの質問はいったん保留にさせてください。

投稿日時 - 2019-07-15 11:53:00

あなたにオススメの質問