Document.BeginUndoScope 方法 (Visio)

为 Microsoft Visio 实例启动具有唯一范围 ID 的事务。

语法

表达式BeginUndoScope (bstrUndoScopeName)

表达 一个代表 Document 对象的变量。

参数

名称 必需/可选 数据类型 说明
bstrUndoScopeName 必需 字符串 范围的名称;可能出现在 Visio 用户界面中。

返回值

Long

备注

如果需要了解收到的事件是否为您启动的特定操作的结果,请使用 BeginUndoScopeEndUndoScope 方法封装您的操作。 在事件处理程序中,使用 IsInScope 属性来测试 BeginUndoScope 方法返回的范围 ID 是否为当前上下文的一部分。 当您收到具有该 ID 的 ExitScope 事件时,请确保从 BeginUndoScope 属性中清除存储的范围 ID。

必须使对 BeginUndoScope 方法和 EndUndoScope 方法的调用实现平衡。 如果调用的是 BeginUndoScope 方法,则在完成构成您的范围的操作后,应该立即调用 EndUndoScope 方法。 另外,尽管对多个文档的操作在单个范围中应该是可靠的,但是关闭文档可能会产生副作用,它会清除当前打开的范围的撤消信息并清除撤消和恢复堆栈。 如果发生这种情况,将 bCommit = False 传递给 EndUndoScope 不会还原撤消信息。

也可以使用 BeginUndoScopeEndUndoScope 方法将由加载项定义的动作添加到 Visio 撤消流。 当您在无模式方案(其中初始化代理为加载项用户界面或无模式编程动作的一部分)中进行操作时,这很有用。

注意

大多数 Visio 操作已包装在内部撤消范围中,因此在应用程序中运行的加载项不需要调用此方法。

示例

以下示例显示如何使用 BeginUndoScope 方法为 Visio 实例启动具有唯一范围 ID 的事务。

 
Private WithEvents vsoApplication As Visio.Application 
Private lngScopeID As Long 
 
Public Sub BeginUndoScope_Example() 
 
 Dim vsoShape As Visio.Shape 
 
 'Set the module-level application variable to 
 'trap application-level events. 
 Set vsoApplication = Application 
 
 'Begin a scope and set the module-level scope ID variable. 
 lngScopeID = Application.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 the CellChanged event. 
 vsoShape.Cells("Width").Formula = 5 
 
 'End and commit this scope. 
 Application.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 String) 
 
 If vsoApplication.CurrentScope = lngScopeID Then 
 Debug.Print "Entering my scope " & nScopeID 
 Else 
 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 
 Else 
 Debug.Print "Exit Scope " & bstrDescription & "(" & nScopeID & ")" 
 End If 
 
End Sub

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。