- ベストアンサー
エクセル 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
- みんなの回答 (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
その他の回答 (1)
- ForestRain
- ベストアンサー率63% (14/22)
こんにちは。 ファイルが読み取り専用かどうかは、 開いてみないことには判らないような気がします。 実際に開いてみて、読み取り専用だったら 何もしないで閉じるのではダメなのでしょうか? 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
お礼
お返事ありがとうございます。 これからこれを元に いろいろやってみたいと思います。
お礼
お返事ありがとうございます 内容は半分ぐらいわからないですが、動きはばっちりです!! 自分もWendy02さんのように自由自在に使えるように、がんばります!