カスタム検索
リボン関連

「元に戻す」操作記録用Wordテンプレート

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