0

I am using UndoRecord.StartCustomRecord in Microsoft.Office.Interop.Word to create custom undo records in my VSTO add-in. However, I’ve encountered some unexpected behavior that makes the Word undo stack unusable.

Here’s what I did:

  • From a button click, I performed a Find and Replace operation and applied styles using the set_Style() method.
  • These actions were wrapped inside UndoRecord.StartCustomRecord and UndoRecord.EndCustomRecord.

Issue: When I try to perform these custom actions after adding bullets or numbering, my custom undo record does not appear in the Undo stack as expected. Instead:

  • The “Replace All” operation gets unfolded (treated as a separate undo steps rather than a single custom action).
  • I can no longer undo actions that occurred before my custom action execution.

This essentially breaks the Undo stack.

Code snippet I used:

Word.Range currentRange = Globals.ThisAddIn.Application.Selection.Range;

var application = Globals.ThisAddIn.Application;
var document = application.ActiveDocument;

this.undoRecord = application.UndoRecord;

this.undoRecord.StartCustomRecord("MyRecord");
string replacementText = "";

Word.Find find = currentRange.Find;
find.ClearFormatting();
find.Replacement.ClearFormatting();
find.Text = "^p"; // Paragraph break
find.Replacement.Text = replacementText;
find.Forward = true;
find.Wrap = Word.WdFindWrap.wdFindStop;
find.Format = false;
find.MatchCase = false;
find.MatchWholeWord = false;
find.MatchWildcards = false;
find.Execute(Replace: Word.WdReplace.wdReplaceAll);

foreach (Word.Paragraph paragraph in document.Paragraphs)
{
    paragraph.Range.set_Style(Microsoft.Office.Interop.Word.WdBuiltinStyle.wdStyleEmphasis);
}

this.undoRecord.EndCustomRecord();

I made a sample project in GitHub to recreate this issue. You can build the GitHub sample and try to recreate the issue. Following are the recreation steps.

  • Add some paragraphs to the document
  • Add a number or bullet from Numbering menu.
  • Click on the top button in my VSTO plugin.
  • Custom undo action doesn't reflect properly in Undo stack
  • If the same actions were done to a document without bullets or numbering, undo stack will be unharmed and will work properly.

Am I using UndoRecord.StartCustomRecord incorrectly, or is this a limitation/bug in Word’s undo stack? How should I correctly implement custom undo records in this scenario?

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.