有些网站使用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
如果我按 Alt+F9(显示域代码)我现在就看到了
{ HTMLCONTROL Forms.HTML :TextArea.1 }
在带有滚动条的文本框上方!如果我关闭并再次打开,它仍然在这里。
如何获取此 TextArea 内容并删除|用内容替换该元素?
Word 中的动态内容是使用“字段”进行管理的。并非所有接受输入的字段都是“表单字段”,正如您在使用 Alt+F9 时发现的那样,确实会显示字段代码。
Word的查找/替换功能相当强大:它还可以用来查找字段,甚至是特定字段。在这种情况下,由于您只是希望将它们删除,因此可以找到 HTMLControl 字段并将其替换为“无”。 (如果您想要更具体并保留一些 HTMLControl 字段,请使用尽可能多的文本来仅删除这些字段。)
很多人没有意识到,您可以搜索字段代码而不需要显示它们。查找还可以处理显示的字段结果。诀窍是将
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# - 我的印象是,这实际上是您工作的地方......
我通过搜索原始发帖者提出的确切问题来到这里。我知道 这不是他所要求的确切灵魂,但也许对其他人有帮助。
我正在寻找一个 Sub,它用字段的结果替换所有字段,这样就没有字段,只有文本,留在后面。
此 Sub 迭代字段,将结果写入字段前面(括号之外),然后删除该字段。如果有嵌套的字段/公式,则采用最外层括号的结果。
Sub RelpaceFieldsWithResult()
Dim oFld As field
Dim oRng As Range
For Each oFld In ActiveDocument.Fields
Set oRng = oFld.Code
oRng.MoveStart wdCharacter, -1
oRng.Collapse
oRng.InsertAfter oFld.Result
oFld.delete
Next oFld
End Sub