如果該用戶打開作業簿超過 2 小時,我需要從共享作業簿中洗掉用戶。
下面的代碼洗掉所有用戶(除了我),如何調整它以添加條件 remove only users whom opened this work for more than 2 hours.

Sub Remove_Timed_Users_from_Shared_Workbook()
Dim UsrList()
UsrList = ThisWorkbook.UserStatus
For i = UBound(UsrList, 1) To 1 Step -1
If UsrList(i, 1) <> Application.UserName Then
ThisWorkbook.RemoveUser i
End If
Next
End Sub
uj5u.com熱心網友回復:
我無法對此進行測驗,因為我不在作業網路上,但我認為ThisWorkbook.UserStatus(2)這就是您要尋找的。
[
Workbook.UserStatus] 回傳一個基于 1 的二維陣列,該陣列提供有關將作業簿作為共享串列打開的每個用戶的資訊。第二維的第一個元素是用戶名,第二個元素是用戶上次打開作業簿的日期和時間,第三個元素是一個數字,表示串列的型別(1表示獨占,2表示共享)。
然而你的計劃似乎很危險。如果時鐘到達 2 小時時用戶正在處理作業簿,會發生什么情況?無論如何,將它們踢出去,可能會丟失未保存的更改?
uj5u.com熱心網友回復:
檢查UserStatus時間戳的第二個引數,計算自該時間戳以來經過了多少秒,然后您可以通過一些數學運算將其與 2 小時進行比較。
Sub Remove_Timed_Users_from_Shared_Workbook()
Const TwoHours As Long = 60 * 60 * 2
Dim Seconds As Long
Dim i As Integer
Dim UsrList()
UsrList = ThisWorkbook.UserStatus
For i = UBound(UsrList, 1) To 1 Step -1
If UsrList(i, 1) <> Application.UserName Then
'If UsrList(i, 3) = 2 Then ' if it is shared/removable(?)
Seconds = DateDiff("s", UsrList(i, 2), Now)
If Seconds > TwoHours Then ThisWorkbook.RemoveUser i
'End If
End If
Next
End Sub
不確定它會讓你真正洗掉用戶。如果您無法繞過某些限制,請告知我們。如果 Shared/Exclusive 很重要,您可以使用我注釋掉的行上的檢查。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/341092.html
