
VSTO Pluging: Copying format restarts a custom undo record
We are developing a Word add-in using VSTO and have encountered an issue with a custom UndoRecord
. The problem arises when we use the CopyFormat
method between the StartCustomRecord
and EndCustomRecord
method calls. Executing CopyFormat
causes the existing UndoRecord
to close and a new one to start, resulting in an additional record appearing in the undo stack, which is not the desired behaviour.
Here is a simplified version of the method we are using:
csharpCopy code
private static void PasteRtf(string rtf, Range sourceRange, Range targetRange)
{
var undoRecord = sourceRange.Application.UndoRecord;
try
{
undoRecord.StartCustomRecord("Custom record");
targetRange.InsertParagraphBefore();
targetRange = targetRange.Paragraphs.First.Range;
System.Windows.Clipboard.Clear();
System.Windows.Clipboard.SetData(System.Windows.DataFormats.Rtf, rtf);
targetRange.Paste();
sourceRange.Select();
sourceRange.Application.Selection.CopyFormat();
targetRange.Select();
targetRange.Application.Selection.PasteFormat();
}
finally
{
undoRecord.EndCustomRecord();
}
}
In the above code, StartCustomRecord
is called at the beginning, and EndCustomRecord
is called at the end. However, after executing CopyFormat
, it seems that a new UndoRecord
is created, which results in multiple undo actions for a single operation.
Our questions are:
- Why does
CopyFormat
cause a newUndoRecord
to be created? - How can we prevent this behaviour and ensure that only one undo record is created for the entire operation?
Any insights or suggestions would be greatly appreciated. Thanks in advance!
Microsoft 365 and Office | Development | Other

Microsoft 365 and Office | Install, redeem, activate | For business | Windows
Microsoft 365 and Office | Word | For business | Windows
