プロが教える店舗&オフィスのセキュリティ対策術

DOCUMENT行の書き出しについて(http://oshiete.goo.ne.jp/qa/4495749.html)の回答1を参考にしてエクセルのVBAでやってみたが、エラーが出てしまいます。
どうすればよいでしょうか?

Windows XP SP3
Excel2003 SP3

参照設定は以下のもので試してみましたが、エラーになります。
Microsoft XML,v3.0
Microsoft XML,v6.0
---------------------------------------------------------------
Dim xmlDoc As MSXML2.DOMDocument
Dim xmlPI As IXMLDOMProcessingInstruction
Dim xmlDoctype As XmlDocumentType '←ここでコンパイルエラー

'エラーメッセージ
'コンパイルエラー:
'ユーザー定義型は定義されていません。

Set xmlDoc = New MSXML2.DOMDocument
Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"""))
Set xmlDoctype = xmlDoc.appendChild(xmlDoc.CreateDocumentType("BookList", "", "Title.dtd", ""))
xmlDoc.Save "C:\Books\Title.xml"
---------------------------------------------------------------

A 回答 (4件)

適当な情報を提示しまして申し訳ありません。



単純にloadXMLしただけでは、パーサーを通るときにエラーになってしまうようです。
また、DTDのファイルも探しに行ってしまうようです。
さらに、DOCTYPEのみのXMLではだめで、何らかの本文も必要なようです。(<abc>1</abc>の部分)
簡単に検証しましたが以下のコードではなんとなくうまくいっているようです。
doctypeプロパティなどでDOCTYPEが取れるので良いように思うのですが。。。
ちょっと無理やりのようにも思いますので要件に合うかわかりませんが、参考になればと思います。
研究してみて下さい。

----
Dim Str As String
Str = "<!DOCTYPE BookList SYSTEM ""Title.dtd""><abc>1</abc>"

xmlDoc.async = false
xmlDoc.resolveExternals = false
xmlDoc.validateOnParse = false

If xmlDoc.loadXML(Str) <> true Then WScript.Echo "エラー"
xmlDoc.Save "C:\_Books\Title.xml"
----
    • good
    • 0
この回答へのお礼

あーーーーーー
出来たぁーーーーーー!

ありがとうございます、感謝感謝です!
本当に助かりました。


ちょっとまとめておきますね。

動作環境--------------------------
Windows XP SP3
Excel2003 SP3
VBE Microsoft Visual Basic 6.5
----------------------------------

参照設定--------------------------
Microsoft XML,v6.0
----------------------------------

------------------------------------------
Dim xmlDoc As MSXML2.DOMDocument
Set xmlDoc = New MSXML2.DOMDocument
Dim WScript
Dim Str As String
Str = "<?xml version=""1.0"" encoding=""UTF-8"" ?><!DOCTYPE BookList SYSTEM ""Title.dtd""><abc>1</abc>"

xmlDoc.async = False
xmlDoc.resolveExternals = False
xmlDoc.validateOnParse = False

If xmlDoc.loadXML(Str) <> True Then WScript.Echo "エラー"
xmlDoc.Save "C:\_Books\Title.xml"
------------------------------------------

出力----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE BookList SYSTEM "Title.dtd">
<abc>1</abc>
--------------------------------------

「WScript」で「変数が定義されていません」とエラーが出たので、とりあえず定義しておきました。
おかしいようでしたらご指摘願います。

いやー、スッキリしました。

お礼日時:2011/01/20 18:06

>文字列でもやってみたのですが、0kb(空っぽ)のファイルでしか書き出されません。


>xmlDoc.Load Str

このメソッドはファイル入力ですので、文字列のXMLをロードするには、

xmlDoc.loadXML(str)

です。(かっこはなくてもいいと思います)
    • good
    • 0
この回答へのお礼

あ、すいません、

xmlDoc.loadXML Str

でやってみたんですが、0kbだったので試しに

xmlDoc.Load Str

でもやってみたんです。結果的にどちらもダメでしたが・・・

お礼日時:2011/01/19 09:55

私もあまり詳しくないので申し訳なく、間違っていたら申し訳ありません。


MSXML2.DOMDocumentでは <!DOCTYPE ・・・・は作成出来ないような感じですね。
(取得することは出来るけど)
LoadXMLで文字列として直接書いて作るしかなさそうです。
    • good
    • 0
この回答へのお礼

maesenさん、気にかけていただきありがとうございます。

文字列でもやってみたのですが、0kb(空っぽ)のファイルでしか書き出されません。
--------------------------------------------------------
Dim Str As String
Str = "<!DOCTYPE BookList SYSTEM ""Title.dtd"">"

xmlDoc.Load Str
xmlDoc.Save "C:\_Books\Title.xml"
--------------------------------------------------------
何かでエラーが発生しているようですが・・・

お礼日時:2011/01/17 18:52

IXMLDOMDocumentType では?



このエラー箇所とは別の部分でも、
なんかソース内に.NETのクラスの記述とが混在しているように思います。

http://msdn.microsoft.com/en-us/library/ms760218 …
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

>IXMLDOMDocumentType では?
これで変数の定義時のエラーはでなくなりました。
ありがとうございました。

ただ、
Set xmlDoctype = xmlDoc.appendChild(xmlDoc.CreateDocumentType("BookList", "", "Title.dtd", ""))
の「.CreateDocumentType」でエラーが出ます。
----------------------------------------------
コンパイルエラー:
メソッドまたはデータメンバが見つかりません。
----------------------------------------------

msdnを見てもDocumentTypeをCreateするメソッドが見当らず・・・
う~ん、msdnを彷徨ってきます・・・

お礼日時:2011/01/14 16:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!