2014-11-05 57 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

相关问题