共有ブックを開いているユーザーを調べる


ブックを「共有ブック」として保存すると、複数のユーザーで同時に編集することができます。

あなたが共有ブックを開いたとき、ネットワーク内で他の誰かが同じブックを開いているかもしれません。

共有ブックを、現在誰が開いているかを調べるには、WorkbookオブジェクトのUserStatusプロパティを使います。

UserStatusプロパティは、そのブックを開いているユーザーに関する情報を、次のような二次元配列で返します。

UserStatus(n, 1) … ユーザー名
UserStatus(n, 2) … 開いた日時
UserStatus(n, 3) … 共有ブックかどうか

もし、そのブックを、あなただけが開いているのなら、UserStatusプロパティが返す配列の要素は1(あなただけ)になります。配列の要素数を調べるにはUBound関数を使います。

Sub Sample1()
    Dim Users
    Users = ActiveWorkbook.UserStatus
    If UBound(Users) = 1 Then
        MsgBox "他に開いているユーザーはいません"
    Else
        MsgBox "あなた以外の誰かがブックを開いています"
    End If
End Sub

なお、ブックを「共有ブックとして開いているかどうか」は、WorkbookオブジェクトのMultiUserEditingプロパティで判定できます。共有ブックとして開いている場合はTrueが返ります。

Sub Sample2()
    Dim Users
    If ActiveWorkbook.MultiUserEditing Then
        Users = ActiveWorkbook.UserStatus
        If UBound(Users) = 1 Then
            MsgBox "他に開いているユーザーはいません"
        Else
            MsgBox "あなた以外の誰かがブックを開いています"
        End If
    Else
        MsgBox "共有ブックとして開いていません"
    End If
End Sub

UserStatusプロパティが返す配列には3つの情報が格納されています。

UserStatus(n,1)には「ユーザー名」が入ります。このユーザー名は、Excelの[オプション]ダイアログボックスで設定されているユーザー名です。

UserStatus(n,2)は「ブックを開いた日時」です。この日時は「1/10/2007 1:23」のように"日/月/年 時:分"という書式ですので、必要であればFormat関数などで書式を変換してください。ただし、秒の情報は含まれていません。

UserStatus(n,3)は「1」また「2」の数値が返ります。ブックが共有ブックだったときは「2」、共有ブックでないときは「1」が返ります。

Sub Sample3()
    Dim Users, buf As String, i As Long
    Users = ActiveWorkbook.UserStatus
    For i = 1 To UBound(Users)
        buf = buf & Users(i, 1) & Chr(9) & Users(i, 2) & Chr(9) & Users(i, 3) & vbCrLf
    Next i
    MsgBox buf
End Sub