Как правильно отмечает Синди, по возможности следует избегать работы с Selection.При этом вам нужно применить wdNoHighLight
к непустому диапазону, чтобы эффект вступил в силу.Итак, начиная с вашей последней строки, следующий код делает это.Адаптируйтесь к своим потребностям так, как считаете нужным:
WordApp.Selection.Range.HighlightColorIndex = Word.WdColorIndex.wdBrightGreen;
WordApp.Selection.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
WordApp.Selection.MoveRight(Word.WdUnits.wdCharacter, 1, Extend: true);
WordApp.Selection.Range.HighlightColorIndex = Word.WdColorIndex.wdNoHighlight;
WordApp.Selection.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
WordApp.Selection.TypeText("YaddaYadda");
Вы должны увидеть «YaddaYadda» без выделения.
Немного дополнительно: двойные точки (точка-точка выбора) обычно вызывают проблемы, когдаработа с COM-объектами.Попробуйте вместо этого использовать замещающие переменные.Также убедитесь, что вы используете
Marshal.ReleaseComObject(document);
, а также освободите все остальные ссылки на Word до конца кода.
Редактировать: Альтернатива без выделения.Самый простой способ - просто использовать замену для невыделенного текста.Чтобы упростить задачу, я получил доступ к первичному заголовку первой страницы.
var section = currDocument.Sections.First;
var header = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];
var hRange = header.Range.FormattedText;
var highlightedText = "abc";
var normalText = " Yadda yadda";
//insert highlighted text and bookmark
hRange.Text = highlightedText;
currDocument.Bookmarks.Add("bookmark", hRange);
hRange.HighlightColorIndex = Word.WdColorIndex.wdBrightGreen;
//insert normal text, turn off highlighting
hRange.InsertAfter(normalText);
var find = hRange.Find;
find.ClearFormatting();
find.Replacement.ClearFormatting();
find.Text = normalText;
find.Replacement.Text = normalText;
find.Replacement.Highlight = (int) Word.WdColorIndex.wdNoHighlight;
find.Execute(Replace: Word.WdReplace.wdReplaceOne);
Marshal.ReleaseComObject(find);
Marshal.ReleaseComObject(hRange);
Marshal.ReleaseComObject(header);
Marshal.ReleaseComObject(section);