プロが教える店舗&オフィスのセキュリティ対策術

以前、同じ質問をしたことがあります。(QNo.3615620)
「ネットワーク障害などでサーバー上のエクセルブックが開けない時、かなり待たされてから次のメッセージが出ます。
実行時エラー'1004' 'Open'メソッドは失敗しました。'Workbooks'オブジェクト
しかもその間、Ctrl-Breakも受け付けてくれません。
正確に待ち時間は計ったわけではありませんが、10分くらいでしょうか。
なんとかこれを回避して、早い時間にエラーメッセージを出してコントロールを戻すことはできないでしょうか?
以下のVBAでオープンしています。
Workbooks.Open Filename:=myFileName, Readonly:=True
よろしくお願い申し上げます。 」

この時はネットワークに原因があるものと思い込んでおり、いただいた回答もVBAによるpingの発信及び受取りでした。
ところが、この症状が発生している状況で、Pingを行ってもほとんど瞬時に戻ってきました。
またDir関数で該当エクセルファイルを指定しても、直ちにコントロールが戻ります。
どうやら誰かが該当ファイルを排他制御で開いているのが原因の様です。
これを回避し、使えない場合直ちにメッセージを表示しコントロールを戻すことはできないでしょうか。
該当ファイルは使えなくて構いません。
エクセルが砂時計のままで何も受け付けない状態を回避したいのです。
よろしくお願い申し上げます。

A 回答 (1件)

こんにちは。



排他的オープンなら、以下のようにすれば、チェック出来ると思うのです。

>Dir関数で該当エクセルファイルを指定しても、直ちにコントロールが戻ります。
まあ、VBAでは、それをコントロールとは言わないけれども、意味は分かります。


-------------------------------------------------

Sub BookEnableChecker()
Dim MyPath As String
Dim myFno As Integer
Const Fname As String = "TestBook1.xls"
MyPath = "\\サーバー名 \○○\"
If Dir(MyPath & Fname) <> "" Then
 myFno = FreeFile
 On Error Resume Next
 Open MyPath & Fname For Binary Lock Read Write As #myFno
 Close #myFno
End If
 If Err.Number = 70 Then
  MsgBox "ブックは開いています", 16
 ElseIf Err.Number = 0 Then
  MsgBox "ブックは編集できます。", 64
 Else
  MsgBox "ブックを調べてください", 32
 End If
 On Error GoTo 0
End Sub

この回答への補足

教えていただいたロジックは入れてありますが、もう1ヶ月以上経ちますが、このような事象は発生しませんでした。
この質問は〆させていただきたいと思います。
どうもありがとうございました。

補足日時:2008/02/18 22:34
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
使用するのは職場です。
トライするのは3連休の後になると思います。
結果は"補足"で報告いたします。

お礼日時:2008/01/11 21:00

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