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