Application.EndUndoScope 方法 (Visio)Application.EndUndoScope Method (Visio)

结束或取消具有唯一范围的事务。Ends or cancels a transaction that has a unique scope.


expressionexpression. EndUndoScope( _nScopeID_ , _bCommit_ )

expression:一个表示 Application 对象的变量。expression A variable that represents an Application object.


名称Name 必需/可选Required/Optional 数据类型Data type 说明Description
nScopeIDnScopeID 必需Required LongLong 要关闭的范围的 ID。The ID of the scope to close.
bCommitbCommit 必需Required BooleanBoolean 指示应接受 (True) 还是取消 (False) 在范围期间所做的更改的标志。flag indicating that the changes made during the scope should be accepted (True) or canceled (False).

返回值Return value



如果您需要知道您接收的事件是否是由您发起的特定操作的结果,请使用BeginUndoScopeEndUndoScope方法以环绕您的操作。If you need to know whether events you receive are the result of a particular operation that you initiated, use the BeginUndoScope and EndUndoScope methods to wrap your operation. 在事件处理程序,使用IsInScope属性来测试是否由BeginUndoScope方法返回的范围 ID 是当前上下文的一部分。In your event handlers, use the IsInScope property to test whether the scope ID returned by the BeginUndoScope method is part of the current context. 确保清除收到该 ID 的ExitScope事件时,在BeginUndoScope属性中存储的范围 IDMake sure you clear the scope ID you stored from the BeginUndoScope property when you receive the ExitScope event with that ID.

您必须平衡BeginUndoScope方法调用通过调用EndUndoScope方法。You must balance calls to the BeginUndoScope method with calls to the EndUndoScope method. 如果您调用BeginUndoScope方法,您应调用EndUndoScope方法,只要完构成您范围的操作。If you call the BeginUndoScope method, you should call the EndUndoScope method as soon as you are done with the actions that constitute your scope. 此外,同时向多个文档的操作应稳固单个范围内,关闭文档可能具有副作用清除当前打开的范围的撤消信息,以及清除撤消和恢复堆栈。Also, while actions to multiple documents should be robust within a single scope, closing a document may have the side effect of clearing the undo information for the currently open scope as well as clearing the undo and redo stacks. 如果发生这种情况,传递 bCommit = FalseEndUndoScope不还原撤消信息。If that happens, passing bCommit = False to EndUndoScope does not restore the undo information.

您还可以使用BeginUndoScopeEndUndoScope方法添加到 Microsoft Visio 加载项定义操作的撤消流。You can also use the BeginUndoScope and EndUndoScope methods to add an action defined by an add-on to the Microsoft Visio undo stream. 从无模式方案,其中初始化代理是添加登录用户界面或无模式的编程操作的一部分操作时,这很有用。This is useful when you are operating from modeless scenarios where the initiating agent is part of an add-on's user interface or a modeless programmatic action.

注释 由于多数 Visio 动作已经封装在内部撤消范围,因此应用程序中运行的加载项不需要调用此方法。Note Most Visio actions are already wrapped in internal undo scopes, so add-ons running within the application do not need to call this method.

如果您的 Visual Studio 解决方案包括Microsoft.Office.Interop.Visio参考 (英文),此方法将映射到以下类型:If your Visual Studio solution includes the Microsoft.Office.Interop.Visio reference, this method maps to the following types:

  • Microsoft.Office.Interop.Visio.IVApplication.EndUndoScope (int、 bool)Microsoft.Office.Interop.Visio.IVApplication.EndUndoScope(int, bool)


本示例演示如何使用EndUndoScope方法结束为 Visio 实例具有唯一范围 ID 的事务。This example shows how to use the EndUndoScope method to end a transaction that has a unique scope ID for an instance of Visio.

Private WithEvents vsoApplication As Visio.Application  
Private lngScopeID As Long 
Public Sub EndUndoScope_Example()  
    Dim vsoShape As Visio.Shape  
    'Set the module-level application variable to  
    'trap Application-level events.  
    Set vsoApplication = Visio.Application  
    'Begin a scope and set the module-level variable.  
    lngScopeID = vsoApplication.BeginUndoScope("Draw Shapes")  
    'Draw three shapes.  
    Set vsoShape = ActivePage.DrawRectangle(1, 2, 2, 1) 
    ActivePage.DrawOval 3, 4, 4, 3  
    ActivePage.DrawLine 4, 5, 5, 4  
    'Change a cell to trigger a CellChanged event.  
    vsoShape.Cells("Width").Formula = 5  
    'End and commit this scope.  
    vsoApplication.EndUndoScope lngScopeID, True  
End Sub    
Private Sub vsoApplication_CellChanged(ByVal Cell As IVCell)  
    'Check to see if this cell change is the result of something  
    'happening within the scope.  
    If vsoApplication.IsInScope(lngScopeID) Then  
        Debug.Print Cell.Name & " changed in scope "; lngScopeID  
    End If 
End Sub   
Private Sub vsoApplication_EnterScope(ByVal app As IVApplication, _  
    ByVal nScopeID As Long, _  
    ByVal bstrDescription As 
    If vsoApplication.CurrentScope = lngScopeID Then  
        Debug.Print "Entering my scope " & nScopeID  
        Debug.Print "Enter Scope " & bstrDescription & "(" & nScopeID & ")"  
    End If 
End Sub   
Private Sub vsoApplication_ExitScope(ByVal app As IVApplication, _  
    ByVal nScopeID As Long, _  
    ByVal bstrDescription As String, _  
    ByVal bErrOrCancelled As Boolean)  
    If vsoApplication.CurrentScope = lngScopeID Then  
        Debug.Print "Exiting my scope " & nScopeID  
        Debug.Print "Exit Scope " & bstrDescription & "(" & nScopeID & ")"  
    End If  
End Sub

支持和反馈Support and feedback

有关于 Office VBA 或本文档的疑问或反馈?Have questions or feedback about Office VBA or this documentation? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.