• ベストアンサー

Excel VBAにて「任意のエクセルファイルが使用中か確認したい」

お世話になります。 任意のエクセルファイルが使用中かどうか?判断し、 使用中の場合は強制終了させる どのようにコーディングすればよいでしょうか? ※任意のファイル名というのは、  現在の年月日により変動するので固定させずにパラメータとしています よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#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

motsu2006
質問者

お礼

解決しました! 何度もお付き合いいただき、本当にありがとうございました。

その他の回答 (3)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

Zap35さんのいうとおりB.xlsがあれが強制終了させるわけですから 開いてるかどうかはコードで判断させなくてもいいですよね。 で、別解。On Errorを使う方法。 ------------------------------------------------ Sub Test(myBook As String)   On Error Resume Next   Workbooks(myBook).Close False   On Error GoTo 0 End Sub ------------------------------------------------ 以上です。  

motsu2006
質問者

お礼

ご回答、ありがとうございました。 後々の参考にさせていただきたいと思います。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#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を押してマクロ一覧からマクロ名を選択します。

motsu2006
質問者

お礼

すみません、補足内容の訂正です。 >しかし、B.XLSが起動していない・ファイルが存在しない場合は、 →ファイルが存在しない場合のみ 起動していなくても、存在していれば問題なく処理は流れました。 よって、ファイルが存在しない場合のみ回避する場合があるようです。

motsu2006
質問者

補足

再度ご回答いただき、ありがとうございます。 試したところ、 B.XLSが起動されている場合は問題なく強制終了できました。 しかし、B.XLSが起動していない・ファイルが存在しない場合は、 「実行時エラー '432'  オートメーションの操作中にファイル名またはクラス名を  見つけられませんでした」 とエラーメッセージが表示され、そこで処理はストップしてしまいます。 いかがでしょうか? やはりB.XLSの起動中を判断し、 起動中の場合のみ強制終了するように組み立てなければ ならないのではないでしょうか? まことに恐れ入りますが、回避策を教えていただけますでしょうか?

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

補足要求です。 そのエクセルファイルは自分のPCにあり、自分が専有していますか? それともネットワークを介して共有されている可能性があるファイルですか。 また「強制終了」の対象は何ですか? 共有されている場合は相手方のエクセルを終了するのでしょうか。 質問文から「共有」の匂いがしなくもないのですが、その場合は下記の過去問が参考になるかもしれませんよ http://oshiete1.goo.ne.jp/qa2633977.html

motsu2006
質問者

補足

zap35さん ご回答ありがとうございます。 以下、補足です。 >そのエクセルファイルは自分のPCにあり、自分が専有していますか? それともネットワークを介して共有されている可能性があるファイルですか。 →自分のPCにあり、自分が占有しています また「強制終了」の対象は何ですか? 共有されている場合は相手方のエクセルを終了するのでしょうか。 →A.xlsから、B.xlsが開いているかどうか判断し、開いている場合は強制終了。なお、Bは固定名称ではなくパラメータを使用します。 以上です、他にも不足部分がありましたら補足させていただきますので、どうぞよろしくお願いします。

関連するQ&A