WindowsXP、VB.NET2003で開発しています。
「2つのCSVファイルをMDBに取り込み、MDBで集計したデータをエクセルで出力する」
というプログラムを作成しました。
ここで、取り込むCSVが使用中の場合、
(テキストエディタで開いている、エクセルで開いている・・など)、
プログラム実行時のエラーは、下記のメッセージとなります。
※「MDBへデータ取込中にエラーが発生しました
ファイルを開くことが出来ませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。」
どのプログラムで起動しているかはユーザによって変わるため、
該当のCSVファイルが使用中であれば、
『○○は使用中です。使用中でないことを確認してから再度実行してください』
といったメッセージを表示したいと考えています。
検索したところ下記のサイトが出てきましたが、
内容が理解出来ていないこともあり、この方法を使用していいのかどうか分かりません。
http://soudan1.biglobe.ne.jp/qa3180014.html
また、自分なりに考えたのは、「※」のエラーをトラップしたら、
自分で考えたエラーメッセージを表示し、Exit Sub で処理を終了させる・・というものですが、
この「※」のエラーを特定してトラップする方法が分かりません。
(どのようにして検索すれば知りたい情報が出るか分かっていません)
どのようにすればよいでしょうか・・。
VB.NET系なら
Try〜Catch構文を調べてみよう
VBのヘルプとか、ネットで「Try」あたりで引っ掛ければ情報は得られると思う
(もちろんネットの場合は「VB.NET」も付加して)
まずは適当な検索文字で検索して、徐々に絞り込んでいけばいい
Catchも検索文字列に入れてみる、とかね
ちなみに「VB.NET エラートラップ」でググっても、参考になる情報は
ゴロゴロ出てくる
中には「On Error Goto」に関する説明も出てくるけど、
.NETではOn Errorは出来るだけ使わないようにしよう
ちなみにオススメはココかな
内容は多いけど詳しい
http://dobon.net/vb/dotnet/beginner/exceptionhandling.html
>2つのCSVファイル
>MDB
>エクセル
質問文からだけでも少なくとも4つのファイルがあることが想像できます。
ファイル操作をするのであればどのファイルに対しても同様の対処をする必要があるのではないでしょうか?
#同様の、ではなく一般的なエラーすべてを考えたほうがいいですけどね。
返事が遅くなりました。
try〜catch〜end try でのエラートラップについて勉強してみました。
下記のようにして、ファイルが開けなければエラーメッセージを表示することとしました。
また、それ以外の例外も取得できるようにしました。
Dim fs As System.IO.FileStream
Dim strFPath As String = "ファイルパス"
Try
fs = New System.IO.FileStream(strLastMon, IO.FileMode.Open, IO.FileShare.ReadWrite)
fs.Close()
Catch ex As System.IO.IOException
MsgBox(System.IO.Path.GetFileName(strFPath) & "は既に別のプロセスで起動しています。" & vbNewLine & "別のプロセスを終了させてから再実行してください。")
Exit Sub
Catch ex As Exception
MsgBox("ファイルの入出力でエラーが発生しました。" & vbNewLine & ex.Message)
Exit Sub
Finally
If Not (fs Is Nothing) Then
fs.Close()
End If
End Try
エラー処理に関して、奥が深いのですね・・。
ヒントありがとうございました。