• ベストアンサー

エクセル VBA 読み取り専用になっているファイルを開く場合

エクセルVBAを取り組んでいるのですが、 "A"のファイルでマクロを作動させて、"B"のファイルを開くマクロを組んでいます。 その時に誰かが"B"のファイルを開いていた場合強制的に読み取り専用で開いてしまいます。 読み取り専用で開こうとした場合には、マクロを停止させるようにしたいのですが、どういう形にしたら良いでしょうか? ちなみに"B"ファイルを開いているマクロを下に乗せておきますので、変更しなければならない等がありましたら、教えていただけますと幸いです。 For Each wb In Workbooks If InStr(wb.Name, "B") > 0 Then flag = True Next wb If flag = True Then Else Workbooks.Open Filename:="Z:\B.xls" End If

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >その時に誰かが"B"のファイルを開いていた場合強制的に読み取り専用で開いてしまいます。 つまり、ファイルが共有関係にあるのですね。その場合、このようにするのが一般的かもしれません。 Sub Test1() Dim Fname As String Dim myPath As String Dim myFno As Integer myPath = "Z:\" Fname = "B.xls"  myFno = FreeFile  On Error Resume Next  Open myPath & Fname For Binary Lock Read Write As #myFno  Close #myFno If Err.Number = 70 Then   MsgBox "すでに開いています。" ElseIf Err.Number = 0 Then   Workbooks.Open myPath & Fname End If End Sub

nanny
質問者

お礼

お返事ありがとうございます 内容は半分ぐらいわからないですが、動きはばっちりです!! 自分もWendy02さんのように自由自在に使えるように、がんばります!

その他の回答 (1)

回答No.1

こんにちは。 ファイルが読み取り専用かどうかは、 開いてみないことには判らないような気がします。 実際に開いてみて、読み取り専用だったら 何もしないで閉じるのではダメなのでしょうか? Sub Sample() Dim wb As Workbook Set wb = Workbooks.Open(Filename:=Z:\B.xls") If wb.ReadOnly Then wb.Close Set wb = Nothing End Sub

nanny
質問者

お礼

お返事ありがとうございます。 これからこれを元に いろいろやってみたいと思います。

関連するQ&A