![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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"
---------------------------------------------------------------
No.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"
----
あーーーーーー
出来たぁーーーーーー!
ありがとうございます、感謝感謝です!
本当に助かりました。
ちょっとまとめておきますね。
動作環境--------------------------
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」で「変数が定義されていません」とエラーが出たので、とりあえず定義しておきました。
おかしいようでしたらご指摘願います。
いやー、スッキリしました。
No.3
- 回答日時:
>文字列でもやってみたのですが、0kb(空っぽ)のファイルでしか書き出されません。
>xmlDoc.Load Str
このメソッドはファイル入力ですので、文字列のXMLをロードするには、
xmlDoc.loadXML(str)
です。(かっこはなくてもいいと思います)
あ、すいません、
xmlDoc.loadXML Str
でやってみたんですが、0kbだったので試しに
xmlDoc.Load Str
でもやってみたんです。結果的にどちらもダメでしたが・・・
No.2
- 回答日時:
私もあまり詳しくないので申し訳なく、間違っていたら申し訳ありません。
MSXML2.DOMDocumentでは <!DOCTYPE ・・・・は作成出来ないような感じですね。
(取得することは出来るけど)
LoadXMLで文字列として直接書いて作るしかなさそうです。
maesenさん、気にかけていただきありがとうございます。
文字列でもやってみたのですが、0kb(空っぽ)のファイルでしか書き出されません。
--------------------------------------------------------
Dim Str As String
Str = "<!DOCTYPE BookList SYSTEM ""Title.dtd"">"
xmlDoc.Load Str
xmlDoc.Save "C:\_Books\Title.xml"
--------------------------------------------------------
何かでエラーが発生しているようですが・・・
No.1
- 回答日時:
IXMLDOMDocumentType では?
このエラー箇所とは別の部分でも、
なんかソース内に.NETのクラスの記述とが混在しているように思います。
http://msdn.microsoft.com/en-us/library/ms760218 …
お返事ありがとうございます。
>IXMLDOMDocumentType では?
これで変数の定義時のエラーはでなくなりました。
ありがとうございました。
ただ、
Set xmlDoctype = xmlDoc.appendChild(xmlDoc.CreateDocumentType("BookList", "", "Title.dtd", ""))
の「.CreateDocumentType」でエラーが出ます。
----------------------------------------------
コンパイルエラー:
メソッドまたはデータメンバが見つかりません。
----------------------------------------------
msdnを見てもDocumentTypeをCreateするメソッドが見当らず・・・
う~ん、msdnを彷徨ってきます・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル VBA dll 読み込...
-
Returnに対するGoSubがありません
-
「パス名が無効です」の発生原因
-
NAS上のファイルの使用中が解除...
-
batファイルでレジストリキーの...
-
VBでファイルが開かれているか...
-
エクセルマクロでエラーの原因...
-
gccを行ってもexeファイルが生...
-
エラー:インクルードファイル ...
-
Excelファイルのマクロによる排...
-
EXCELのVBAでWORDが開いてある...
-
ExcelVBAで既に開いてるwordを...
-
PowerShellを使って関連付けら...
-
ファイルクローズ(fclose)でエ...
-
VB.NETでUnzip32.DLLを使うには?
-
FORTRANの実行エラーについて
-
すでにファイルが開かれている...
-
ACCESS VBAでのインポート
-
VB実行時エラー75:「パス名が...
-
エクセル「これ以上新しいフォ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Returnに対するGoSubがありません
-
VBでファイルが開かれているか...
-
batファイルでレジストリキーの...
-
「パス名が無効です」の発生原因
-
FTPの送信結果を検知したい
-
アクセスのクエリでコンパイル...
-
ACCESS VBAでのインポート
-
VBから参照できないCのDLLを使...
-
VB6 Dir関数で52エラー発生
-
すでにファイルが開かれている...
-
freadでデータがない場合の読込...
-
access テキストボックスの値取得
-
fgets関数のEOFの扱い方について
-
NAS上のファイルの使用中が解除...
-
Access2013にてドラッグ&ドロ...
-
【COBOL】read文でエラー
-
エクセル VBA dll 読み込...
-
PowerShellを使って関連付けら...
-
アクセスでイベントのロジック...
-
エクセルマクロでエラーの原因...
おすすめ情報