Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
〇〇〇.xlsxは編集中の為ロックされていますのメッセージを出さない方法は?
投稿日時: 22/01/13 17:08:45
投稿者: よしあき

<やっていること>
エクセルファイルを自動で更新するVBAを作成しています。
 
<問題点>
他の人がこのエクセルファイルを開いていて、上記VBAを実行した場合、
「〇〇〇.xlsxは編集中の為ロックされています」のメッセージボックスが表示され、
自動化のVBAが止まってしまいます。これを解決したい。
→メッセージボックスを出さずに「ファイルは他で使用中」の旨の復帰情報を受けとり
 VBA側でエラー処理をしたい。
 
<解決に向けて試みたこと>
以下の方法を試したのですが、やはりメッセージボックスが出てしまいます。
 
方法1:読み取り専用か判定する方法。
 <ソースコード>
  'エクセルファイルをオープン
  Set wb = Workbooks.Open(ThisWorkbook.Path & "\test.xlsx")
  '読み取り専用かどうか判定
    If ActiveWorkbook.ReadOnly = True Then
        '他で使用中の場合のエラー処理
    Else
        '通常処理
    End If
  'クローズ
  wb.Close
 
方法1+α
  上記方法1の前に下記のコードを入れる
 
   Application.DisplayAlerts = False
 
  方法1+αを調べてみると、すべてのメッセージボックスを非表示にするわけではなく、
  システムとしてメッセージ表示と利用者の応答が必要な場合は、
  メッセージボックスが表示されるとのこと。。。
 
他で使用中でもメッセージボックスを表示せず、復帰コードで「使用中」を返すような
関数や方法があればよいのですが。。。
 
お手数ですがご教授ください。

回答
投稿日時: 22/01/13 18:42:17
投稿者: taitani

ファイルを開く前に読み取り専用かどうか確認する方がよいかと。
以下が参考になると思います。
http://vbaexcel.seesaa.net/article/139525983.html
※ '◆ファイルを読み取り専用で開いている場合はいったん閉じる 部分。

回答
投稿日時: 22/01/13 18:57:10
投稿者: taitani
投稿日時: 22/01/13 19:55:14
投稿者: よしあき

<引用部分>

taitani さんの引用:
こちらの方が分かりやすいかもです。
https://vbabeginner.net/how-to-check-set-and-cancel-read-only-workbooks/#keni-toc1

<私のコメント>
taitani様 早速の返信、ありがとうございます。
教えていただいた上記のロジックでは、今開いているブック(つまりマクロが動作しているブック)が
ActiveWorkBookになります。
なので該当エクセルファイルをチェックする場合は、教えていただいたロジックの先頭に、該当エクセルをオープンするコードを書くことになります。
そうすると、そのオープンでメッセージボックスが出てしまうのです。
(つまり、私が書いた「方法1」と同じになってしまいます)
エクセルオープン時にメッセージボックスを出さない指定か何かがあればよいのですが、
それがわからず、今のことろうまくいっておりません。。。
 

回答
投稿日時: 22/01/13 21:55:18
投稿者: WinArrow
投稿者のウェブサイトに移動

1つの案です。
 

Sub Sample()
Dim Filepath As String
    Filepath = "D:\Test\book1.xls"
    If Dir(Filepath) = "" Then
        MsgBox "ファイル無"
        Exit Sub
    End If

    If IsBookOpenFlag(Filepath:=Filepath) Then
        MsgBox "使用中"
    End If
End Sub



Public Function IsBookOpenFlag(ByVal Filepath As String)
Dim FNO As Long

    On Error Resume Next
    IsBookOpenFlag = False
    FNO = FreeFile
    Open Filepath For Append As FNO
    If Err.Number = 70 Then
        IsBookOpenFlag = True
    Else
        Close (FNO)
    End If
    On Error GoTo 0
    
End Function

回答
投稿日時: 22/01/14 08:44:44
投稿者: Suzu

別インスタンスにて Excel.Application を作成し、
そのインスタンスにて 該当する WorkBook を開き ReadOnly プロパティーを取得してはどうですか。

投稿日時: 22/01/14 13:43:26
投稿者: よしあき

ご提案内容でうまくいきました。(他で使用中のメッセージボックスは出ない)。
どうもありがとうございました。