下記のように、DataSetをXML出力するメソッドを作りました。
Public Sub WriteXml(ByVal xmlDs As DataSet)
Try
Dim fileStream As New System.IO.FileStream(holdFilePath, System.IO.FileMode.Create)
Dim setting As New System.Xml.XmlWriterSettings
'文字コード設定
With setting
.Encoding = System.Text.Encoding.UTF8
.Indent = True
End With
Dim writer As System.Xml.XmlWriter = Xml.XmlWriter.Create(fileStream, setting)
'XMLへの書き込みを行い、FileStreamを閉じる
xmlDs.WriteXml(writer)
writer.Close()
fileStream.Close()
Catch ex As Exception
MsgBox(ex.message)
End Try
End Sub
メソッドは以上です。
writer.Close()、fileStream.Close()については、確実に
処理を行いたいので、Finallyで行おうかと思ったのですが、
その場合、Dim fileStream~、Dim writer~はTryの外に出さないと、
宣言されていないと言われてしまいます。
そうなると今度は、NewやXml.XmlWriter.Create(fileStream, setting)
でコケた場合にCatchが出来ません…。
Usingを使うのが近いかなと思ったんですが、複数Newしている場合
でも使えるのでしょうか?
確実にClose処理を行うための改修箇所、アドバイスいただけ
ないでしょうか?
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
Usingの利用でいいと思います。
Tryの中に書く感じで。
Usingはカンマ区切りにすることで、複数のインスタンスに利用できます。
あるいは入れ子にしてもいいですが。
Using ○○, △△
~
End Using
または
Using ○○
Using △△
~
End Using
End Using
No.1
- 回答日時:
Dimによる宣言と Newによるインスタンス化を別々に記述すれば解決しませんか
Dim fileStream As System.IO.FileStream
Dim setting As System.Xml.XmlWriterSettings
Dim writer As System.Xml.XmlWriter
といった具合に使う変数の宣言だけをTryより前で行います
インスタンス化する際に
fileStream = New System.IO.FileStream(holdFilePath, System.IO.FileMode.Create)
setting = New System.Xml.XmlWriterSettings
writer = Xml.XmlWriter.Create(fileStream, setting)
といった具合にしてやればいいと思いますよ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CloseとDisposeの違い
-
クラスの実体を一つにする方法
-
VBAでCOPYを繰り返すと、処理が...
-
「ご処理進めて頂きますようお...
-
Excelシート上のマクロを登録し...
-
「PC Helpsoft Driver Updated...
-
エクセルで、日付を入力すると...
-
サブフォームのイベント取得
-
UWSC 画像認識で条件分岐
-
switch の範囲指定
-
スマホF-51Bに緊急時情報画面で...
-
VBA シート毎に画像挿入
-
csvに保存しているデータをURL...
-
DAOでSQLServerに接続し、LeftJ...
-
VBA エンターキーでイベントに...
-
お家デートをしててハグを長い...
-
UWSCを使って画像リンクをクリ...
-
uwscの画像認識に失敗します。
-
UWSC「画像が無い場合」
-
エクセル2000VBAでオブジェクト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CloseとDisposeの違い
-
C# 超初心者です。 this.Refres...
-
[C#]FormクラスのShowメソッド...
-
DLL内のイベントをハンドリング
-
[swift]動的なキーを持つJSONの...
-
C#のインスタンスを参照渡ししたい
-
Try~Catch、Finallyについて。
-
objective-C(Xcode)に関して...
-
Graphicsプロパティ
-
OCXのメソッドの引数に文字列を...
-
コールバックでイベントを使う...
-
vb.net フォームアプリケーシ...
-
フィールド(メンバ変数)のプリ...
-
objective-cにはCのような関数...
-
VB.NET スプラッシュスクリー...
-
クラスの実体を一つにする方法
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
Excelシート上のマクロを登録し...
-
エクセルVBAで、MsgBox やInput...
おすすめ情報