Динамический контент в Word управляется с помощью «полей». Не все поля, которые принимают ввод, являются «полями формы», как вы обнаружили, когда используете Alt + F9, отображают коды полей.
Функция поиска и замены Word довольно мощная: ее также можно использовать для поиска полей, даже определенных полей. В этом случае, поскольку вы просто хотите, чтобы они были удалены, поля HTMLControl можно найти и заменить на «ничего». (Если вы хотите быть более конкретным и оставить некоторые поля HTMLControl, используйте столько текста, сколько необходимо, чтобы удалить только эти поля.)
Многие люди не осознают этого, но вы можете искать коды полей без необходимости их отображения. Find также может работать с отображаемыми результатами. Хитрость заключается в том, чтобы установить Range.TextRetrievalMode
для включения кодов полей (и в этом случае я думаю, что включение скрытого текста также является хорошей идеей, но если это проблема, закомментируйте или удалите эту строку).
^d
в тексте поиска представляет открывающую скобку поля: {- если бы это поле было опущено, то только то, что находится внутри скобок, было бы заменено (удалено), что я не рекомендую. При ^d
затрагивается все поле, включая закрывающую скобку.
Sub FindAndDeleteHtmlFields()
Dim doc As word.Document
Dim fld As word.Field
Dim rngFind As word.Range
Set doc = ActiveDocument
Set rngFind = doc.content
rngFind.TextRetrievalMode.IncludeFieldCodes = True
rngFind.TextRetrievalMode.IncludeHiddenText = True
With rngFind.Find
.Text = "^d HTMLControl"
.ClearFormatting
.Replacement.Text = ""
.Execute Replace:=wdReplaceAll
End With
End Sub
Обратите внимание, что это также переносит на C # - у меня такое впечатление, что именно там вы работаете ...