「ユーザー設定の「元に戻す」機能を使用する(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>