2014-11-05 56 views
2

我有一個共享文檔,它在關閉時運行各種命令。這包括正常保存(如果文檔仍然共享)並保存爲共享(如果文檔未共享)。如何檢查當前用戶是否已從共享工作簿中刪除?

當一個人將文檔打開一段時間然後關閉它時,就會出現問題。該文檔會自動覆蓋當前文檔(如果文檔未共享,或者在.save命令運行時提供覆蓋選項)並且同時輸入的數據可能會丟失。

如何檢查用戶是否從文檔中刪除,以便在這種情況下可以跳過保存部分?

Private Sub Workbook_BeforeClose(Cancel As Boolean) 

    For i = 1 To Sheets.Count  
     If Sheets(i).ProtectContents = False Then 
      Call Protect_Sheets 'Protects all the sheets 
     End If 
    Next i 

    If ActiveWorkbook.ProtectStructure = False Then 
     Call Protect_Workbook 'Protects the workbook 
    End If 

    If ActiveWorkbook.MultiUserEditing = False Then 
     Call SaveAsShared 'Saves the workbook as shared (overrides) 
    Else 
     ActiveWorkbook.Save 'Only saves as normal when the document was shared upon close (but defaults the current document name (which will override when no attention is paid)) 
    End If 

End Sub 

如果可能的話,我想另一個「如果」,當用戶已經從工作簿中刪除終止分(只是調用SaveAsShared函數之前)。 任何幫助將不勝感激! 在此先感謝!

Lou

+0

如果用戶已從文檔中刪除,他們是否知道他們已被刪除,他們的文檔的臨時版本是否知道? – Tbaker 2014-11-06 16:47:19

+0

如何檢查臨時版本是否仍然連接到文檔?我不確定當你被踢出文檔時會發生什麼......另外,如果是這種情況,我會插入一個消息框告訴他們它們已被刪除。 (順便說一句,非常感謝你看這個) – Lou 2014-11-07 09:54:01

+0

如果你可以告訴他們何時斷開連接,如果你在某處保存了一個本地版本,以便在他們需要將它們添加到主文檔時不會丟失它們的更改,退出時的代碼可以正常運行,因爲當它執行workbook.save時,它只會保存在刪除時創建的版本 – Tbaker 2014-11-07 12:40:48

回答

1

我遇到過臨時性的問題。我使用了一個命令(ShowConflictHistory),當你被踢出文檔時返回一個錯誤,然後我使用錯誤處理技術來保存唯一的副本;

On Error GoTo Errhandler: 
If ActiveWorkbook.ShowConflictHistory = False Or True Then 'This returns Err 1004 if the person has been kicked from the workbook, so it can be handled accordingly in ErrHandler. 
End If 

Continue1: 
On Error Resume Next 

''''''''' 
'Main code section 
''''''''' 

Exit Sub 

Errhandler: 

Select Case Err 
    Case 1004: 'The error which results if you've been kicked out of the document. 
     Call SaveCopyOfShared 
     Exit Sub  
    Case Else: 
     GoTo Continue1: 
End Select 

End Sub 

如果有人想出了一個更傳統的解決方案。請告訴我。

+0

所以我認爲這是工作,但即使共享工作簿,它實際上失敗。 – 2016-10-31 00:15:07

相關問題