前提
vbaでSharePointに格納しているファイル(パスワード付き)に対し、編集などを行うインターフェースを作成しています。
実現したいこと
誰もファイルを開いていない場合は、読み取り専用ではない状態で、
誰かがファイルを利用している場合は、読み取り専用でパスワード入力せず、開きたい
発生している問題
誰かがファイルを開いている状態だと、
Workbooks.Open SharePointに格納しているファイルのフルパス, Password:=ファイルパスワード
としていても、Open実行時パスワード入力画面が表示されてしまう。
該当のソースコード
VBA
'SharePoint格納ファイルを開く Workbooks.Open SharePoint格納ファイルフルパス, Password:= ファイルパスワード '読み取り専用なら、一度ファイルを閉じて5秒待つ、再度ファイルを開いて読み取り専用なら繰り返し、 読み取り専用ではない状態なら次の処理へ While ActiveWorkbook.ReadOnly = True Workbooks(ファイル名).Close SaveChanges:=False Application.Wait Now() + TimeValue("00:00:05") Workbooks.Open SharePoint格納ファイルフルパス, Password:= ファイルパスワード Wend
試したこと
①
http://officetanaka.net/excel/vba/tips/tips108.htm
上記サイトで紹介されている、「Notify:=False」を使った方法でもパスワード入力画面が表示が出ました。
②
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13202910518
上記知恵袋ベストアンサーを参考に下記のようにしてみると、パスワード入力画面は表示されないが、Open Filename For Input Lock Read As #FilenumのErr.Numberが52「ファイル名または番号が不正です」となり、ファイルが読み取り専用で開かれ無限ループになってしまう。
Workbooks.Open SharePoint格納ファイルフルパス, Password:= ファイルパスワード,ReadOnly:=IsFileOpen(SharePoint格納ファイルフルパス)
While ActiveWorkbook.ReadOnly = True
Workbooks(file_name).Close SaveChanges:=False
Application.Wait Now() + TimeValue("00:00:05")
Workbooks.Open SharePoint格納ファイルフルパス, Password:= ファイルパスワード,ReadOnly:=IsFileOpen(SharePoint格納ファイルフルパス)
Wend
Function IsFileOpen(Filename As String)
Dim Filenum As Integer
On Error Resume Next
Filenum = FreeFile()
Open Filename For Input Lock Read As #Filenum
IsFileOpen = Err.Number <> 0
Close Filenum
End Function
補足情報(FW/ツールのバージョンなど)
Excel365で作成
0 コメント