我有一个包含两列的电子表格。一列是查找词,另一列是替换词。此代码通过查找词列进行工作,并在 Word 中一次搜索一个词。当找到匹配项时,它会将其替换为替换词列中的相应条目。
代码如下,有很多。
我根据许多在线资源拼凑了这些...这是弗兰肯代码,很抱歉。
现在
Public Sub WordFindAndReplace()
Dim ws As Worksheet, msWord As Object, itm As Range
Dim ObjData As New MSForms.DataObject
Dim strText
Set ws = ThisWorkbook.Sheets("Input")
Set msWord = CreateObject("Word.Application")
With msWord
.Visible = True
.Documents.Open ThisWorkbook.Path & "\keith.docm"
.Activate
With .ActiveDocument.Content.Find
'.ClearFormatting
'.Replacement.ClearFormatting
For Each itm In ws.Range("Checklist1[PolicyIdentifier]").Cells
.Text = itm.Value2 'Find all strings in col F
strText = itm.Offset(, 1).Value2
ObjData.SetText strText
mClipboard.SetClipboard (itm.Offset(, 1).Value2)
.Replacement.text= "^c"
.MatchCase = False
.MatchWholeWord = False
.Execute replace:=2 'wdReplaceAll (WdReplace Enumeration)
Next
End With
With .ActiveDocument.Content.Find
'.ClearFormatting
'.Replacement.ClearFormatting
For Each itm In ws.Range("Checklist1[QuestionIdentifer]").Cells
.Text = itm.Value2 'Find all strings in col I
strText = itm.Offset(, 1).Value2
mClipboard.SetClipboard (itm.Offset(, 1).Value2)
.Replacement.Text = "^c"
.MatchCase = False
.MatchWholeWord = False
.Execute replace:=2 'wdReplaceAll (WdReplace Enumeration)
Next
End With
'.Quit SaveChanges:=True
End With
End Sub
现在,当运行 Excel 中的文本并发送到 Word 时,其格式会丢失。
我认为我想要做的是,不是搜索和替换,而是进行搜索和粘贴 - 这样我就可以保留我的格式。
但我不知道该怎么做。
replace.text = "^c" 已从剪贴板中提取 - 一切正常。但我想直接粘贴它。
或者如果你们知道如何让搜索/替换工作,同时保持我的源格式...我洗耳恭听。
答案1
您的代码将值保存到剪贴板,没有任何格式。只需复制即可itm.Offset(, 1).Copy
。(删除strText = itm.Offset(, 1).Value2
和mClipboard.SetClipboard (itm.Offset(, 1).Value2)
和.Replacement.Text = "^c"
)。
要在 Word 中粘贴,请使用Selection.PasteExcelTable False, False, False
或Selection.PasteAndFormat wdFormatOriginalFormatting
。粘贴Excel表格和粘贴和格式化是 Word 方法,因此您需要添加引用。打开 Excel。打开 Visual Basic 编辑器。单击工具 > 引用。向下滚动并选择“Microsoft Word 16.0 对象库”。
用一个环形代替.Execute replace:=2
。
Do
.Execute
If .Found = True Then Selection.PasteAndFormat wdFormatOriginalFormatting
Loop Until .Found = False