使用 Excel 中的列表替换 Word 文档中的单词 - 需要选择并粘贴而不是替换

使用 Excel 中的列表替换 Word 文档中的单词 - 需要选择并粘贴而不是替换

我有一个包含两列的电子表格。一列是查找词,另一列是替换词。此代码通过查找词列进行工作,并在 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).Value2mClipboard.SetClipboard (itm.Offset(, 1).Value2).Replacement.Text = "^c")。

要在 Word 中粘贴,请使用Selection.PasteExcelTable False, False, FalseSelection.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

相关内容