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

エクセル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

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

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

お礼日時:2006/12/30 12:03

こんにちは。


ファイルが読み取り専用かどうかは、
開いてみないことには判らないような気がします。
実際に開いてみて、読み取り専用だったら
何もしないで閉じるのではダメなのでしょうか?

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

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

お礼日時:2006/12/30 12:01

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