Как заменить поля в документе Word их содержимым с помощью VBA - PullRequest
0 голосов
/ 06 мая 2018

Некоторые сайты используют textarea для публикации кода в статьях. Если кто-то копирует / вставляет статью в Word, она показывает пустую текстовую область с полосами прокрутки и под кодом в таблице с пронумерованными строками, что выглядит ужасно. Я хочу заменить его просто кодом (или только таблицей, которую я могу успешно преобразовать в текст), удалив некрасивую Техасскую область. Попытка сделать это так безуспешно

Sub RemoveTextBoxes()     
  Dim oFld    As Word.FormField

  With Application.ActiveDocument
     ' \\ TextInput Type requires to unprotect the document
    If .ProtectionType <> wdNoProtection Then .Unprotect

     ' \\ Loop all formfields in active document
    For Each oFld In .FormFields()

         ' \\ Only remove Formfield textboxes that have textinput only
        If oFld.Type = wdFieldFormTextInput And oFld.TextInput.Type = wdRegularText Then

             ' \\ Delete
            oFld.Delete
        End If
    Next

     ' \\ Reprotect the document
    .Protect wdAllowOnlyFormFields, True
  End With  
End Sub

Я новичок в VBA, поэтому, пожалуйста, помогите.

Если я нажимаю Alt + F9 (отображает коды полей), я вижу сейчас

{ HTMLCONTROL Forms.HTML :TextArea.1 } 

над текстовым полем с полосами прокрутки! Если я закроюсь и снова откроюсь, он все еще здесь.

Как мне получить это содержимое TextArea и удалить | заменить элемент содержимым?

1 Ответ

0 голосов
/ 08 мая 2018

Динамический контент в 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 # - у меня такое впечатление, что именно там вы работаете ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...