- ベストアンサー
Excel VBAにて「任意のエクセルファイルが使用中か確認したい」
お世話になります。 任意のエクセルファイルが使用中かどうか?判断し、 使用中の場合は強制終了させる どのようにコーディングすればよいでしょうか? ※任意のファイル名というのは、 現在の年月日により変動するので固定させずにパラメータとしています よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#01です。B.XLSが開いていなくても動作確認してエラーにはなっていませんが、ファイルがないと確かにエラーになりますね。 Sub Macro() Dim wb As Workbook Dim FN As String FN = "B.XLS" Set wb = GetObject("z:\" & FN) If Not wb Is Nothing Then Application.DisplayAlerts = False wb.Close Application.DisplayAlerts = True End If End Sub
その他の回答 (3)
- onlyrom
- ベストアンサー率59% (228/384)
Zap35さんのいうとおりB.xlsがあれが強制終了させるわけですから 開いてるかどうかはコードで判断させなくてもいいですよね。 で、別解。On Errorを使う方法。 ------------------------------------------------ Sub Test(myBook As String) On Error Resume Next Workbooks(myBook).Close False On Error GoTo 0 End Sub ------------------------------------------------ 以上です。
お礼
ご回答、ありがとうございました。 後々の参考にさせていただきたいと思います。
- zap35
- ベストアンサー率44% (1383/3079)
#01です。B.XLSが開いていたら強制終了するのであれば、開いているかどうかの判断は不要で「無条件にClose」でよくありませんか? GetObjectを用いたのは「同一PC内の別のエクセルアプリケーションでB.XLSを開いている」可能性があるからです。 Sub Macro() Dim wb As Workbook Dim FN As String FN = "B.XLS" Set wb = GetObject("z:\" & FN) Application.DisplayAlerts = False wb.Close Application.DisplayAlerts = True End Sub マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はシート画面に戻って、ALT+F8を押してマクロ一覧からマクロ名を選択します。
お礼
すみません、補足内容の訂正です。 >しかし、B.XLSが起動していない・ファイルが存在しない場合は、 →ファイルが存在しない場合のみ 起動していなくても、存在していれば問題なく処理は流れました。 よって、ファイルが存在しない場合のみ回避する場合があるようです。
補足
再度ご回答いただき、ありがとうございます。 試したところ、 B.XLSが起動されている場合は問題なく強制終了できました。 しかし、B.XLSが起動していない・ファイルが存在しない場合は、 「実行時エラー '432' オートメーションの操作中にファイル名またはクラス名を 見つけられませんでした」 とエラーメッセージが表示され、そこで処理はストップしてしまいます。 いかがでしょうか? やはりB.XLSの起動中を判断し、 起動中の場合のみ強制終了するように組み立てなければ ならないのではないでしょうか? まことに恐れ入りますが、回避策を教えていただけますでしょうか?
- zap35
- ベストアンサー率44% (1383/3079)
補足要求です。 そのエクセルファイルは自分のPCにあり、自分が専有していますか? それともネットワークを介して共有されている可能性があるファイルですか。 また「強制終了」の対象は何ですか? 共有されている場合は相手方のエクセルを終了するのでしょうか。 質問文から「共有」の匂いがしなくもないのですが、その場合は下記の過去問が参考になるかもしれませんよ http://oshiete1.goo.ne.jp/qa2633977.html
補足
zap35さん ご回答ありがとうございます。 以下、補足です。 >そのエクセルファイルは自分のPCにあり、自分が専有していますか? それともネットワークを介して共有されている可能性があるファイルですか。 →自分のPCにあり、自分が占有しています また「強制終了」の対象は何ですか? 共有されている場合は相手方のエクセルを終了するのでしょうか。 →A.xlsから、B.xlsが開いているかどうか判断し、開いている場合は強制終了。なお、Bは固定名称ではなくパラメータを使用します。 以上です、他にも不足部分がありましたら補足させていただきますので、どうぞよろしくお願いします。
お礼
解決しました! 何度もお付き合いいただき、本当にありがとうございました。