Created
February 24, 2022 15:42
-
-
Save KotorinChunChun/a2cca705e70c7ca0ca9f17f8924a5153 to your computer and use it in GitHub Desktop.
Excelブックが読み取り専用の時に現在開いているユーザーを特定する関数
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Option Explicit | |
Private fso As New FileSystemObject | |
Sub Test_GetLockUserName() | |
Dim PathName As String | |
PathName = "ここに試したいファイルのフルパスをかく" | |
Debug.Print GetLockUserName(PathName) | |
End Sub | |
Rem 開こうとしているOfficeファイルのフルパス | |
Rem @return 使用中のユーザー名 or 空欄(未使用か不明) | |
Function GetLockUserName(ssFullPath As String, Optional ss不明な時の使用者名 As String) As String | |
Rem ファイル名を解析しロックファイル名生成 | |
Dim arrSS() As String | |
arrSS = Split(ssFullPath, "\") | |
arrSS(UBound(arrSS)) = "~$" & arrSS(UBound(arrSS)) | |
Rem ロックファイル検出 無い場合離脱 | |
Dim PathName As String | |
PathName = Join(arrSS, "\") | |
If Not fso.FileExists(PathName) Then Exit Function | |
Rem PCの一時フォルダへコピー できない場合離脱 | |
Dim LockName: LockName = fso.GetSpecialFolder(2) & "\ExcelLockFile" | |
On Error Resume Next | |
fso.CopyFile PathName, LockName | |
If Err Then Exit Function | |
On Error GoTo 0 | |
Rem テキストファイルとして読み込み | |
On Error Resume Next | |
Dim txt As String | |
Dim ts As TextStream | |
Set ts = fso.OpenTextFile(LockName, ForReading, False) | |
txt = ts.ReadAll() | |
ts.Close | |
On Error GoTo 0 | |
Rem ユーザー名部分を抽出 | |
On Error Resume Next | |
txt = Mid(txt, 2) | |
txt = Left(txt, InStr(txt, " ") - 1) | |
On Error GoTo 0 | |
GetLockUserName = txt | |
End Function |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
このVBAで実現しようとしていること(Excelが自動でやってくれていること)
問題点
・Workbook.Openした場合は、この警告が表示されない。
・この使用者名がWorkbookオブジェクトから簡単に取得できない?
解説ツイート
https://twitter.com/KotorinChunChun/status/1496864748616355840?s=20&t=hgcsAKgk_sgR1dVDbOQUCQ
このプログラムでやっているようなことを、手動で行った場合の例と概念