- ベストアンサー
Excel-VBAでDSOFile.dllを使用する方法
- エクセルの「ユーザー設定のドキュメントプロパティ」を取得するためには、Microsoftが作成し無償で公開しているDSOFile.dllをインストールする必要があります。
- DSOFile.dllをダウンロードし、参照設定を行った後、Excel-VBAコード内でオブジェクトを作成して使用することができます。
- Windows Vistaの場合でも、Excel 2007でのVBAプロジェクトでDSOFile.dllを使用することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
言っておくけど、Q6708610とDSO.dllで使っているオブジェクトは異なる物、だからね。 実際そのサンプルに含まれるコード(多分読んでないんだろうなあ)にはBuiltinDocumentPropertiesなどというものは一切使われていない。 参考にした http://technet.microsoft.com/ja-jp/scriptcenter/ff191274 も同様だ。まったくそんなものはない! #一応MS Officeがない環境を考え、Windows XP + VBScriptで検証した。 (マシンがないからそのような環境を作ってテスト、はしてない。なのでVista+MS Office 2007の状況は知らない) '================================ Dim DSO ' VBScriptから As Objectとか型指定はできないみたい。 ' ちなみに、VB6やVBAで参照設定するなら、型名としてちゃんと使えるから、 '遅延バインディングとか要らないと思うよ(VBSは参照設定無理だし型指定もできないけど) Set DSO = WScript.CreateObject("DSOFile.OleDocumentProperties") 'どうも、Excel等が既にこのファイルを読んでいるときに、開こうとするとファイル名等が正しくても、「パスまたはファイル名が無効」みたいなことを言われる。正当な理由があるならエラーになるのは別に構わないんだけど、エラーメッセージくらい正しく出して欲しいものだ。 DSO.Open "D:\Book1.xls" '今回はValueとか付けないみたいです。付けたら怒られたので。厳密に調べたかったら、VB6やVBAのオブジェクトブラウザでも使いましょう。 '何か「ドキュメントがない」んですよね。ひどい事に。 MsgBox DSO.SummaryProperties.Author DSO.Close Set DSO = Nothing '============================== とか実行したら、xlsファイルの作成者名として、xlsを作成したマシンのユーザー名であるOwnerが表示された。
その他の回答 (1)
- yorozu_ya
- ベストアンサー率54% (76/140)
DSOFile.dll は、Excel を使わずに「ユーザー設定のドキュメントプロパティ」を取得するためのものです。 それを Excel から使うというのはどういうことでしょう。 Excel からなら、そんなもの必要ありません。
補足
目的は、当該Excelから他のExcelファイルの「ユーザー設定のドキュメントプロパティ」を取得又は設定したい。且つ、他のExcelファイルを開かないでこれを行いたい。 私のパソコン環境にはVB等の開発環境を用意していません。依ってExcel-VBAによる便利ツールを作成し作業の効率化を試みています。 そこで、掲題の「DSOFile.dll」を適用すれば画期的な威力を発揮してくれるのではと期待しているわけです。的外れでしょうか!?。。。 何れにしろ「実行エラー」が解消できれば幸いです。 ご教授宜しくお願いいたします。
お礼
himajin100000さんお世話になっております。 Dsofile 語られざる物語 http://technet.microsoft.com/ja-jp/scriptcenter/ff191274 を拝見しました(読ませていただきました)…納得。 露骨にファイルを開かないでプロパティ情報値を取得(設定)できる事を理解しました。 お陰様で私の望んでいた事が全て叶いました。 本当にお世話になりました。 <参考> 試行結果:下記は何れも動作しました。 WinXP (Excel2003.xls-VBA) Dsofile.dllを参照設定 WinVista(Excel2007.xls-VBA) Dsofile.dllを参照設定 Sub Dsofile値表示() Dim wTarget As String wTarget = Application.GetOpenFilename("Excel Files(*.xls*), *.xls*") If wTarget = "False" Then Exit Sub Dim objFile As Object Set objFile = CreateObject("DsoFile.OleDocumentProperties") objFile.Open (wTarget) MsgBox "Author: " & objFile.SummaryProperties.Author '←作者 Set objFile = Nothing End Sub