Метод Document.BeginUndoScope (Visio)
Запускает транзакцию с уникальным идентификатором области для экземпляра Microsoft Visio.
Синтаксис
expression. BeginUndoScope (bstrUndoScopeName)
Выражение Переменная, представляющая объект Document .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
bstrUndoScopeName | Обязательный | String | Имя области; может отображаться в пользовательском интерфейсе Visio. |
Возвращаемое значение
Длинное целое
Замечания
Если необходимо знать, являются ли события, которые вы получаете, результатом конкретной операции, которую вы инициировали, используйте методы BeginUndoScope и EndUndoScope , чтобы обертывать операцию. В обработчиках событий используйте свойство IsInScope , чтобы проверить, является ли идентификатор области, возвращенный методом BeginUndoScope , частью текущего контекста. При получении события ExitScope с этим идентификатором убедитесь, что вы удалили идентификатор области, сохраненный из свойства BeginUndoScope.
Вызовы метода BeginUndoScope необходимо сбалансировать с вызовами метода EndUndoScope . При вызове метода BeginUndoScope следует вызвать метод EndUndoScope , как только вы завершите работу с действиями, составляющими область. Кроме того, хотя действия для нескольких документов должны быть надежными в пределах одной области, закрытие документа может иметь побочный эффект очистки сведений об отмене для открытой области, а также очистки стеков отмены и повтора. В этом случае передача bCommit = Falseв EndUndoScope не восстанавливает сведения об отмене.
Вы также можете использовать методы BeginUndoScope и EndUndoScope , чтобы добавить действие, определенное надстройкой, в поток отмены Visio. Это полезно, если вы работаете в сценариях без режима, где агент-инициатор является частью пользовательского интерфейса надстройки или немодерным программным действием.
Примечание.
Большинство действий Visio уже заключены во внутренние области отмены, поэтому надстройкам, работающим в приложении, не нужно вызывать этот метод.
Пример
В этом примере показано, как использовать метод 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 и обратная связь.