VB.NETでExcelのデータを読込むということをしています。
同じファイルの2重起動をエラーとしてメッセージボックスに表示しようとしたのですが
(自分で読込みファイルを起動した状態で実行)、エラーとして認識してくれません。
それが通常の動作ならエラーとして処理する必要はないのですが、Excelで"既に開かれています"みたいなメッセージを見たことがあるような気がしたので・・・
ご存知の方よろしくお願いします。
Excelは2000を使用しています。
Excel起動のソース↓
On Error GoTo Err_trap
Exl = CreateObject("excel.application")
Exl.Workbooks.Open("ファイルのパスを指定")
Err_trap:
Msgbox("起動中のファイルが選択されました")
VBレスキュ−(花ちゃん)のサイトに載ってますよ。
http://www.bcap.co.jp/hanafusa/
oku様ありがとうございます。
VBレスキュ−(花ちゃん)のサイトを見させていただきました。
VBレスキュ−に表示されていたように試してみたのですが、
読み取りExcelを起動後に実行した時のErr.Numberと
読み取りExcelを起動しないで実行した時のErr.Numberは
両方とも"0"でした。これでは2重起動なのか判断つきません。
Excelの2重起動防止方法をご存知の方どうかよろしくお願いします。
その時のソースです。
Exl = CreateObject("excel.application")
'
If Err.Number Then
MsgBox("Excel が起動されていません。")
' エラーが発生した場合は Err オブジェクトをクリアします。
Err.Clear()
Else
MsgBox("Excel はすでに起動中です。")
End If
Exl.Visible = False
'指定ファイルOpen
Exl.Workbooks.Open("ファイルのパス")
If Err.Number Then
MsgBox("Excel が起動されていません。")
' エラーが発生した場合は Err オブジェクトをクリアします。
Err.Clear()
Else
MsgBox("Excel はすでに起動中です。")
End If
※APIの方は試していませんが、上記の方法ではできないのでしょうか?
(過去に痛い経験あるのであまりAPIは使用したくないのですが・・・)
こんな感じでどうでしょう。
ただし"C:\Test.xls"があるかどうかの確認等ほかのエラー
の可能性をすべて考慮しないとこれでは他のエラーも拾うと思います。
On Error Resume Next
Dim mFile As String
mFile = "C:\Test.xls"
Exl = CreateObject("excel.application")
'指定ファイルOpen
Rename(mFile, mFile)
If Err.Number Then
MsgBox(mFile & "はすでに起動中です。")
Err.Clear()
Exl = Nothing
Else
Exl.Workbooks.Open(mFile)
Exl.Visible = True
End If
oku様、Take1様ありがとうございました。
Renameを使用した方法で2重起動の確認ができました。
Take1様のご忠告どうり他のエラーと区別できるように気をつけます。
本当にありがとうございました。
ツイート | ![]() |