EXCEL VBA初心者です。
以前こちら(https://oshiete.goo.ne.jp/qa/9377896.html)で更新日時の追加のご助言をいただき大変助かりました。
しかし、今度は最終更新者をわかるようにしてほしいと言われ、どうにか追加できないでしょうか…。
●「Excelでファイル階層表作成」(http://www.vector.co.jp/soft/winnt/util/se499921 …)というフリーソフトで指定フォルダの階層を取得しています。
●レジストリに書き込んだりするexeのインストールは不可
●サイズを表示する列の右隣に更新日時を追加したのでその右隣へ追加したいです。
重ね重ね頼ってばかりで申し訳ありませんが、どうぞよろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
No2です。
最終更新者が取得できるのは、excel,word等のoffice関連のファイルになります。
それ以外のファイルは取得できません。
excel,word等のファイルから最終更新者を取得する場合、GetObjectを呼び出しますが、これは
execl,wordファイルをオプーン、クローズするのと同じ程度の時間がかかります。
もし、100個のexecl又はwordファイルがあれば、オプーン、クローズを100回行ったのと同じ程度の時間がかかります。
又、excel,word以外のファイルに対してGetObjectの呼び出しを行った場合は、エラーになり、最終更新者を取得できません。その為、最初にファイルの拡張子を見て、GetObjectの呼び出しを行うか否かを判断するようにします。
又、GetObjectの呼び出し対象ファイルが新しいバージョンのファイル(.xlsx,xlsm等)の場合、
古いexcel(excel2003以前)で、このマクロを呼び出すと、ファイルのコンバージョンが発生します。
この事態を回避するためには、excel2007以降で、このマクロを使用するか、
古いexcel(excel2003以前)で、このマクロを使用する場合は、新しいバージョンのファイルを最終更新者の取得対象外にする必要があります。
そうした事情を踏まえて、以下の仕様でもよろしければ、修正したソースを提示することは可能です。
1.最終更新者を表示できるのはexecl,word関連のファイルのみとする。
(拡張子がxls,xlsx,xlsm,doc,docxのみとする。拡張子の追加はソースの修正で簡単に追加可能)
上記以外のファイルは、最終更新者欄は空白で表示する。
2.exel,word関連のファイルの最終更新者の取得は時間がかかるため、既存の「Excelでファイル階層表.xls」に比べて処理時間が劇的に遅くなる。
3.excel2007以降で、このマクロを使用することを推奨する。
もし、古いexcel(excel2003以前)で、このマクロを使用する場合は、ソースから拡張子(xlsx,xlsm)を削除して使用する必要がある。
上記仕様で問題ないか依頼者にご確認をお願いします。
ひとまとめでのお礼で失礼いたします。
たくさんのご回答をいただきありがとうございました。
No2で教えて頂いたVBAマクロで試してみましたが、こちらの回答でおっしゃっている通り開いては閉じ…とやっているものでした。
取得はできるものの、大量のファイルがあるため断念致しました。
色々と教えていただきましてありがとうございます。
No.3
- 回答日時:
>今度は最終更新者をわかるようにしてほしいと言われ、
AtiveWorkbook.BuiltinDocumentProperties("Last Author")
と外部的に取り出すのと比較してみましたが、なぜか、内部(ファイルを開いて)から取り出す場合は、エラーが発生するものがあります。Attribute とかチェックしたのですが、それとは違うようです。
ここはExcelだけですので問題ないようですが、私の記憶では、Word のプロパティを取るのが厄介だったはずです。また、取れるものと取れないものがあるのは承知で行っててください。
Excelだけでしたら、 fName = Dir(mFolder & "*.xls?", vbNormal)
です。リストの適当の列に、これを加えればよいです。
'//
Sub GetAuthor()
'Object等は、型の宣言ができないものがある。
Dim oShell, oFolder, buf As String
Dim mFolder, fName
Dim i As Long, ret As String
mFolder = "C:\Temp\Test1\" '末尾に\を入れてください。
Set oShell = CreateObject("Shell.Application")
Set oFolder = oShell.Namespace(mFolder)
Cells(1, 1).Value = "ファイル名"
Cells(1, 2).Value = "Author"
i = 2
Application.ScreenUpdating = False
fName = Dir(mFolder & "*.*", vbNormal)
Do While fName <> ""
If fName <> "." And fName <> ".." Then
Cells(i, 1).Value = fName '1列目
ret = oFolder.GetDetailsOf(oFolder.ParseName(fName), 20)
Cells(i, 2).Value = ret '2列目
i = i + 1
End If
fName = Dir
Loop
Application.ScreenUpdating = True
Set oFolder = Nothing
Set oShell = Nothing
End Sub
'//
試してみましたが、BuiltinDocumentPropertie と、Last Auther は一致しているようです。
ご回答頂きありがとうございます。
頂いたこちらのコードで試してみましたが、エラーが返ってきてしまいました…。。。
教えて頂いたのに使いこなせなくて大変申し訳ないです…。
EXCELとWordが多くあるので、やってみたのですが…。
もっと勉強してやってみます。ありがとうございました。
No.2
- 回答日時:
No1です。
若干、うそが混じっていました。
office関連のファイル(excel,word等)に限って言えば、
vbaの obj.BuiltinDocumentProperties(7)
を使用して最終更新者が取得できるようです。下記参照
http://excel-ubara.com/excelvba4/EXCEL256.html
ファイル一覧に表示しているのは、excel,word関連のファイルですか?
それとも、テキストファイルとかの上記以外のファイルでしょうか。
もし、excel,word関連のファイル限定でよいなら、できるかもしれません。
No.1
- 回答日時:
残念な話ですが、簡単にはできません。
>「Excelでファイル階層表作成」(http://www.vector.co.jp/soft/winnt/util/se499921 …)というフリーソフトで指定フ>ォルダの階層を取得しています。
ということですが、これは、excel vba でFileオブジェクトを使用しています。(下記参照)
http://officetanaka.net/excel/vba/filesystemobje …
この情報の中に、「最終更新者」の情報はありません。ないものを出力することはできません。
エクスプローラで何がしかのファイルのプロパティを確認していただければわかりますが、ここにも「最終更新者」の情報は
ありません。
従って、結論はできませんになります。
もしかして、あなたが、いわれる、「最終更新者」とは、excelファイル(.xls,xlsx)とかwordファイル(.doc,docx)とかを
wordもしくはexeclで開いたときにユーザー情報のようなもののことをいってますか?
そうであれば、(APIを駆使すればもしかすればできるかもしれないが)、簡単な改造ではできません。理由は前述のとおりです。)
あなたが、とるべき対策は、現行のvbaで扱っているには、Fileオブジェクトの情報に「最終更新者」の情報がないので
できませんと依頼されたかたに説明することです。
(エクスプローラで何がしかのファイルのプロパティを表示し、確認していただくことも必要かもしれません)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Excel(エクセル) Excel VBAでフォルダが何層にもなっていて最下層の中にCSVファイルがあり最上層のファイルを指 4 2022/06/08 20:41
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- その他(Microsoft Office) エクセルでテーブルの最終行が自動追加されない 1 2023/01/04 15:09
- Visual Basic(VBA) 複数指定セルの可視セルのみを別シートに転記するVBAについて 2 2022/05/27 21:19
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) マクロの付いたExcelが開けません 3 2023/02/01 10:54
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
Excelで更新日時と更新者を表示させる
Excel(エクセル)
-
エクセルの最終保存者の表示
Excel(エクセル)
-
【VBA】EXCELブックを開かずにファイルのプロパティを取得したい
Visual Basic(VBA)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ffftpでファイル取得が0バイト...
-
Accessのウインドウサイズの固定
-
ファイルを開く時間測定のスク...
-
FileDialog オブジェクトでファ...
-
マクロのワイルドカードの使い...
-
期間を指定したフォルダの削除...
-
データ解析ソフトRでのファイル...
-
エクセルのプロパティーでセキ...
-
Wordで差込印刷した後に別々の...
-
マインクラフトPCをプレイしよ...
-
C++でネットワークパスのファイ...
-
【マクロ】ファイル名の日付に...
-
ファイルのアクセス回数について
-
アクセス クエリを別のファイ...
-
Excelでcsvのフィールドが減る
-
フォルダ名に番号を連番でつけたい
-
VBスクリプトで外字の使用を無...
-
バッチでCSVを処理する時、空の...
-
VBAでの行削除について
-
ExeclVBAユーザーフォームから...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サブフォルダ含むフォルダ内の...
-
vbs ブック共有を解除
-
動かなくなってしまった古いVBA...
-
vbaサブフォルダーをワイルドカ...
-
「エクセルファイルが開いてい...
-
ffftpでファイル取得が0バイト...
-
Accessのウインドウサイズの固定
-
FileDialog オブジェクトでファ...
-
VB6でUTF-8ファイルの読取りを
-
excel マクロ PDF化の際のエラ...
-
VBAでフォルダ内のhtmlファイル...
-
VBからExcelファイルを開くとき...
-
Wordのプロパティ・総ページ数...
-
フォルダ階層・ファイル名・ペ...
-
コモンダイアログでフォルダを...
-
vbsでのアスタリスクとファイル...
-
VB.net XMLの作成方法 Iniの代替
-
エクセルのVBAで開いている...
-
ファイルを開く時間測定のスク...
-
AccessからOLEオブジェクト型の...
おすすめ情報