Document.BeginUndoScope メソッド (Visio)

Microsoft Visio のインスタンスで、一意のスコープ ID を持つトランザクションを開始します。

構文

BeginUndoScope (bstrUndoScopeName)

Document オブジェクトを表す変数。

パラメーター

名前 必須 / オプション データ型 説明
bstrUndoScopeName 必須 String スコープの名前です。Visio のユーザー インターフェイスに表示されます。

戻り値

Long

注釈

受け取るイベントが、ユーザーが実行した操作の結果によって発生したかどうかを確認する場合は、BeginUndoScope メソッドと EndUndoScope メソッドを使用して、その操作をラップします。 イベント ハンドラーで IsInScope プロパティを使用して、BeginUndoScope メソッドによって返されたスコープ ID が現在のコンテキストの一部であるかどうかを確認します。 BeginUndoScope メソッドから返されたスコープ ID は、その ID を持つ ExitScope イベントを受け取った時点で必ずクリアしてください。

BeginUndoScope メソッドの呼び出し回数は、EndUndoScope メソッドの呼び出し回数と一致させる必要があります。 BeginUndoScope メソッドを呼び出した場合は、必要なスコープ内にある操作が終了した時点で EndUndoScope メソッドを呼び出します。 また 1 つのスコープ内で複数の図面を操作することはできますが、いずれかの図面を閉じたとき、現在開いているスコープで操作を元に戻すための情報や、"元に戻す" スタックおよび "やり直し" スタックが消去される場合があります。 その場合、 bCommit = False をEndUndoScope に渡しても、元に戻す情報は復元されません。

BeginUndoScope メソッドと EndUndoScope メソッドを使用し、アドオンによって定義された操作を、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 のサポートおよびフィードバックを参照してください。