
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】同じ関数なのに、エラ...
-
access テキストボックスの値取得
-
ExcelVBAで既に開いてるwordを...
-
DisplayAlertsブロパティで ”実...
-
NAS上のファイルの使用中が解除...
-
fcloseで発生するエラーについて。
-
データベースソフトのアクセス2...
-
2003アクセス → 2010移行のト...
-
エクセルマクロでエラーの原因...
-
PowerShellを使って関連付けら...
-
「パス名が無効です」の発生原因
-
VB6 Dir関数で52エラー発生
-
VBA ExecuteExcel4Macro 型が一...
-
アクセスのクエリでコンパイル...
-
batファイルでレジストリキーの...
-
「複数の選択範囲に対して実行...
-
VBAマクロでエラーで進まない
-
ACCESS VBAでのインポート
-
すでにファイルが開かれている...
-
VBから参照できないCのDLLを使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【関数】同じ関数なのに、エラ...
-
access テキストボックスの値取得
-
「パス名が無効です」の発生原因
-
ExcelVBAで既に開いてるwordを...
-
NAS上のファイルの使用中が解除...
-
Returnに対するGoSubがありません
-
gccを行ってもexeファイルが生...
-
PowerShellを使って関連付けら...
-
batファイルでレジストリキーの...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
エクセルマクロでエラーの原因...
-
VBでファイルが開かれているか...
-
【COBOL】read文でエラー
-
FTPの送信結果を検知したい
-
VBから参照できないCのDLLを使...
-
fgets関数のEOFの扱い方について
-
ACCESS VBAでのインポート
-
データベースソフトのアクセス2...
-
DisplayAlertsブロパティで ”実...
おすすめ情報