アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

任意のエクセルファイルが使用中かどうか?判断し、
使用中の場合は強制終了させる

どのようにコーディングすればよいでしょうか?
※任意のファイル名というのは、
 現在の年月日により変動するので固定させずにパラメータとしています

よろしくお願いします。

A 回答 (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
------------------------------------------------

以上です。
 
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございました。

後々の参考にさせていただきたいと思います。

お礼日時:2007/01/09 15:50

#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
    • good
    • 0
この回答へのお礼

解決しました!

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

お礼日時:2007/01/09 15:50

#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が起動していない・ファイルが存在しない場合は、
「実行時エラー '432'
 オートメーションの操作中にファイル名またはクラス名を
 見つけられませんでした」
とエラーメッセージが表示され、そこで処理はストップしてしまいます。

いかがでしょうか?
やはりB.XLSの起動中を判断し、
起動中の場合のみ強制終了するように組み立てなければ
ならないのではないでしょうか?

まことに恐れ入りますが、回避策を教えていただけますでしょうか?

補足日時:2007/01/09 15:18
    • good
    • 0
この回答へのお礼

すみません、補足内容の訂正です。

>しかし、B.XLSが起動していない・ファイルが存在しない場合は、

→ファイルが存在しない場合のみ

起動していなくても、存在していれば問題なく処理は流れました。
よって、ファイルが存在しない場合のみ回避する場合があるようです。

お礼日時:2007/01/09 15:36

補足要求です。


そのエクセルファイルは自分のPCにあり、自分が専有していますか? それともネットワークを介して共有されている可能性があるファイルですか。

また「強制終了」の対象は何ですか? 共有されている場合は相手方のエクセルを終了するのでしょうか。

質問文から「共有」の匂いがしなくもないのですが、その場合は下記の過去問が参考になるかもしれませんよ
http://oshiete1.goo.ne.jp/qa2633977.html

この回答への補足

zap35さん

ご回答ありがとうございます。
以下、補足です。

>そのエクセルファイルは自分のPCにあり、自分が専有していますか? それともネットワークを介して共有されている可能性があるファイルですか。

→自分のPCにあり、自分が占有しています

また「強制終了」の対象は何ですか? 共有されている場合は相手方のエクセルを終了するのでしょうか。

→A.xlsから、B.xlsが開いているかどうか判断し、開いている場合は強制終了。なお、Bは固定名称ではなくパラメータを使用します。

以上です、他にも不足部分がありましたら補足させていただきますので、どうぞよろしくお願いします。

補足日時:2007/01/09 14:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!