Application.BeginUndoScope メソッド (Visio)
Microsoft Visio のインスタンスで、一意のスコープ ID を持つトランザクションを開始します。
式。BeginUndoScope (bstrUndoScopeName)
expressionApplication オブジェクトを 表す変数。
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
bstrUndoScopeName | 必須 | String | スコープの名前です。Visio のユーザー インターフェイスに表示されます。 |
Long
受信したイベントが、開始した特定の操作の結果であるかどうかを知る必要がある場合は、 BeginUndoScope メソッドと EndUndoScope メソッドを使用して操作をラップします。 イベント ハンドラーで IsInScope プロパティを使用して、BeginUndoScope メソッドによって返されたスコープ ID が現在のコンテキストの一部であるかどうかを確認します。 その ID を持つ ExitScope イベントを受け取るときに、BeginUndoScope プロパティから保存したスコープ ID をクリアしてください。
BeginUndoScope メソッドの呼び出し回数は、EndUndoScope メソッドの呼び出し回数と一致させる必要があります。 BeginUndoScope メソッドを呼び出した場合は、必要なスコープ内にある操作が終了した時点で EndUndoScope メソッドを呼び出します。 また 1 つのスコープ内で複数の図面を操作することはできますが、いずれかの図面を閉じたとき、現在開いているスコープで操作を元に戻すための情報や、"元に戻す" スタックおよび "やり直し" スタックが消去される場合があります。 その場合、 bCommit = False をEndUndoScope に渡しても、元に戻す情報は復元されません。
BeginUndoScope メソッドと EndUndoScope メソッドを使用し、アドオンによって定義された操作を、Visio の "元に戻す" ストリームに追加することもできます。 この方法は、モードレスな状況 (開始するエージェントがアドオンのユーザー インターフェイスの一部である場合) で操作を行うときや、プログラムによるモードレスな操作を実行するときなどに利用できます。
注意
ほとんどの Visio アクションは既に内部の元に戻すスコープにラップされているため、アプリケーション内で実行されているアドオンは、このメソッドを呼び出す必要はありません。
Visual Studio ソリューションに Microsoft.Office.Interop.Visio リファレンスが含まれている場合、このメソッドは次の種類にマップされます。
- Microsoft.Office.Interop.Visio.IVApplication.BeginUndoScope(string)
この例は、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 のサポートおよびフィードバックを参照してください。