Поделиться через


Метод Application.BeginUndoScope (Visio)

Запускает транзакцию с уникальным идентификатором области для экземпляра Microsoft Visio.

Синтаксис

expression. BeginUndoScope (bstrUndoScopeName)

выражение: переменная, представляющая объект Application.

Параметры

Имя Обязательный или необязательный Тип данных Описание
bstrUndoScopeName Обязательный String Имя области; может отображаться в пользовательском интерфейсе Visio.

Возвращаемое значение

Длинное целое

Замечания

Если необходимо узнать, являются ли полученные события результатом конкретной операции, которую вы инициировали, используйте методы BeginUndoScope и EndUndoScope для переноса операции. В обработчиках событий используйте свойство IsInScope , чтобы проверить, является ли идентификатор области, возвращенный методом BeginUndoScope , частью текущего контекста. Убедитесь, что вы очищаете идентификатор области, сохраненный из свойства BeginUndoScope , при получении события ExitScope с этим идентификатором.

Вызовы метода BeginUndoScope необходимо сбалансировать с вызовами метода EndUndoScope . При вызове метода BeginUndoScope следует вызвать метод EndUndoScope , как только вы завершите работу с действиями, составляющими область. Кроме того, хотя действия для нескольких документов должны быть надежными в пределах одной области, закрытие документа может иметь побочный эффект очистки сведений об отмене для открытой области, а также очистки стеков отмены и повтора. В этом случае передача bCommit = Falseв EndUndoScope не восстанавливает сведения об отмене.

Вы также можете использовать методы BeginUndoScope и EndUndoScope , чтобы добавить действие, определенное надстройкой, в поток отмены Visio. Это полезно, если вы работаете в сценариях без режима, где агент-инициатор является частью пользовательского интерфейса надстройки или немодерным программным действием.

Примечание.

Большинство действий Visio уже заключены во внутренние области отмены, поэтому надстройкам, работающим в приложении, не нужно вызывать этот метод.

Если ваше решение Visual Studio содержит ссылку microsoft.Office.Interop.Visio , этот метод сопоставляется со следующими типами:

  • Microsoft.Office.Interop.Visio.IVApplication.BeginUndoScope(string)

Пример

В этом примере показано, как использовать метод BeginUndoScope для запуска транзакции с уникальным идентификатором области для экземпляра Visio.

 
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 и обратная связь.