「ユーザー設定の「元に戻す」機能を使用する(Word 2010 VBA)」で、UndoRecordオブジェクトを利用すると一連の操作を一つの"元に戻す"単位として記録できることを紹介しました。
関連記事として、新田順也さんのブログ「アンドゥ(Undo)を記録するマクロ (Word 2010専用)」にてUndoRecordオブジェクトを使用したWordテンプレートが公開されていましたので、私の方でもリボン版のテンプレートを下記にて公開することにしました(Word 2010専用)。
※ このテンプレートはマクロを使用していますが、全文書対象のテンプレート(Normal.dot、Normal.dotm)ファイルには変更を加えません。
「元に戻す」操作記録用Wordテンプレート
このテンプレート(MyCustomUndo.dotm)ファイルをWordのスタートアップフォルダにコピーして(スタートアップフォルダを開く際は「Wordのスタートアップフォルダを開く(VBS)」で紹介しているスクリプトが便利です)Wordを起動すると、クイックアクセスツールバーに操作記録用のボタンが表示されます(不要になった場合はスタートアップフォルダからMyCustomUndo.dotmファイルを削除してください)。
このボタンをクリックすると、「元に戻す」操作として複数の行程を記録できるようになります。
再びボタンをクリックすると記録を中止し、この時点で記録した操作を取り消す(元に戻す)ことも出来ますが、後で「元に戻す」から操作をまとめて取り消すこともできます。
Sponsored Links
このテンプレートで使用しているコードは下記の通りで、クイックアクセスツールバーへの登録は「クイックアクセスツールバーのボタンイメージを好きな画像にする(2)」で紹介した方法で行っています。
[標準モジュール]
Option Explicit
Private myRibbon As Office.IRibbonUI
Private flg As Boolean
Private ur As Word.UndoRecord
Public Sub Ribbon_onLoad(ribbon As IRibbonUI)
Set myRibbon = ribbon
flg = False
End Sub
Public Sub toggleButton_getImage(control As IRibbonControl, ByRef returnedVal)
Select Case flg
Case True
returnedVal = "UnmarkAllForDownload"
Case False
returnedVal = "Unmark"
End Select
End Sub
Public Sub toggleButton_getLabel(control As IRibbonControl, ByRef returnedVal)
Select Case flg
Case True
returnedVal = "現在操作記録中です。"
Case False
returnedVal = "現在操作を記録していません。"
End Select
End Sub
Public Sub toggleButton_getScreentip(control As IRibbonControl, ByRef returnedVal)
Select Case flg
Case True
returnedVal = "現在操作記録中です。"
Case False
returnedVal = "現在操作を記録していません。"
End Select
End Sub
Public Sub toggleButton_getPressed(control As IRibbonControl, ByRef returnedVal)
returnedVal = flg
End Sub
Public Sub toggleButton_onAction(control As IRibbonControl, pressed As Boolean)
Select Case pressed
Case True
If MsgBox("操作を記録しますか?", vbYesNo, "「元に戻す」操作記録") = vbYes Then
flg = True
StartUR
Else
flg = False
End If
Case False
If MsgBox("操作の記録を中止しますか?", vbYesNo, "「元に戻す」操作記録") = vbYes Then
flg = False
EndUR
If MsgBox("一連の処理を取り消しますか?", vbYesNo, "「元に戻す」操作記録") = vbYes Then ActiveDocument.Undo
Else
flg = True
End If
End Select
myRibbon.InvalidateControl control.ID
End Sub
Private Sub StartUR()
If Not ur Is Nothing Then Exit Sub
Set ur = Application.UndoRecord
If ur.IsRecordingCustomRecord = False Then
ur.StartCustomRecord "クリックすると一連の操作を元に戻せます。"
End If
End Sub
Private Sub EndUR()
If ur Is Nothing Then Exit Sub
If ur.IsRecordingCustomRecord = True Then
ur.EndCustomRecord
Set ur = Nothing
End If
End Sub
<?xml version="1.0" encoding="utf-8"?>
<customUI onLoad="Ribbon_onLoad" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab id="tabUndo" label="UndoRecord" visible="false">
<group id="grpUndo" label="UndoRecord">
<toggleButton id="tglUndo" getImage="toggleButton_getImage" getLabel="toggleButton_getLabel" getPressed="toggleButton_getPressed" getScreentip="toggleButton_getScreentip" onAction="toggleButton_onAction" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>