ブックを「共有ブック」として保存すると、複数のユーザーで同時に編集することができます。
あなたが共有ブックを開いたとき、ネットワーク内で他の誰かが同じブックを開いているかもしれません。
共有ブックを、現在誰が開いているかを調べるには、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
