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

解決済みの質問

Excel-VBAでDSOFile.dll使える?

エクセルの「ユーザー設定のドキュメントプロパティ」を取得するには、Microsoftが作成し無償で公開しているDsofile.dllをインストールすれば可能との事なので、以下のページからダウンロードして、インストールしました。
Microsoft Developer Support OLE File Property Reader 2.1 Sample (KB 224351)
http://www.microsoft.com/downloads/en/details.aspx?FamilyId=9BA6FAC6-520B-4A0A-878A-53EC8300C4C2&displaylang=en
<現象>
参照設定「DSO OLE Document Properties Reader 2.1」の後、
次のを実行したのですが「実行エラー438」が発生!?
Sub Test01()
Dim DSO As Object
Set DSO = CreateObject("DSOFile.OleDocumentProperties")
DSO.Open "D:\Test1\Book01.xls"
MsgBox DSO.BuiltinDocumentProperties("Author") '←実行エラー
DSO.Close
Set DSO = Nothing
End Sub
<質問>
OS:WinVista(Excel2007-VBA)でDSOFile.dllは使えますか?
ご教授よろしくお願いいたします。

投稿日時 - 2011-05-04 18:52:59

QNo.6713899

すぐに回答ほしいです

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

言っておくけど、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が表示された。

投稿日時 - 2011-05-05 18:47:41

お礼

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

投稿日時 - 2011-05-09 16:21:48

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

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

回答(2)

ANo.1

DSOFile.dll は、Excel を使わずに「ユーザー設定のドキュメントプロパティ」を取得するためのものです。
それを Excel から使うというのはどういうことでしょう。
Excel からなら、そんなもの必要ありません。

投稿日時 - 2011-05-04 20:35:49

補足

目的は、当該Excelから他のExcelファイルの「ユーザー設定のドキュメントプロパティ」を取得又は設定したい。且つ、他のExcelファイルを開かないでこれを行いたい。
私のパソコン環境にはVB等の開発環境を用意していません。依ってExcel-VBAによる便利ツールを作成し作業の効率化を試みています。
そこで、掲題の「DSOFile.dll」を適用すれば画期的な威力を発揮してくれるのではと期待しているわけです。的外れでしょうか!?。。。
何れにしろ「実行エラー」が解消できれば幸いです。
ご教授宜しくお願いいたします。

投稿日時 - 2011-05-04 21:15:05

あなたにオススメの質問