用Excel中的文本替换Word doc中的文本

时间:2018-03-30 10:30:33

标签: excel vba excel-vba replace ms-word

我希望在excel中创建一个via脚本,用excel中的一些文本替换word doc中的文本持有者。

我可以使用via脚本打开doc这个单词,然后以新名称保存doc。但它不会执行替换文本部分:(

Private Sub CommandButton1_Click()
    Dim wdApp As Object
    Dim wdDoc As Object
    Set wdApp = CreateObject("Word.Application")
        wdApp.Visible = False
    Set wdDoc = wdApp.Documents.Open("temp.docx")

    With wdDoc.Content.Find
        .ClearFormatting
        .Text = "<<name>>"
        With .Replacement
            .ClearFormatting
            .Font.Bold = True
            .Text = "John Smith"
        End With
        .Execute Replace:=wdReplaceAll
    End With

    wdDoc.SaveAs2 Filename:=("temp2.docx")

    Set wdApp = Nothing
    Set wdDoc = Nothing

End Sub

我试过在这里做搜索,但看不到我错在哪里:(

目前它打开word文档并将其保存在新名称下,但不替换查找并替换文本。任何人都可以看到我出错的地方,并告诉我如何做到正确吗?

3 个答案:

答案 0 :(得分:0)

当我在Word中为您的问题描述设置测试时,输入&lt;&lt; name&gt;&gt;我看到Word用特殊符号替换了两个带角度的括号。并且它提供了撤消自动更正的可能性。

在它们上查询ASC(Selection.Text)会给出Chr(171)和Chr(187),它们也是双角括号符号,但在Find中使用它们不起作用。查询AscW()显示两个符号是Unicode 8810和8811,因此需要对它们进行不同的搜索。

假设您的案例中存在问题,则以下方法有效:

With wdDoc.content.Find
    .ClearFormatting
    .Text = ChrW(8810) & "name" & ChrW(8811) '"<<name>>"
    With .Replacement
        .ClearFormatting
        .Font.Bold = True
        .Text = "John Smith"
    End With
    .Execute Replace:=wdReplaceAll
End With

除了你的代码之外 - 还有其他可能严重的问题(内存泄漏):

如果你这样做:wdApp.Visible = False那么你需要绝对肯定从内存中删除Word:

wdDoc.Close
wdApp.Quit
Set wdDoc = Nothing
Set wdApp = Nothing

与Excel不同,Word在对象超出范围(宏结束)时不会自动退出。它将保持打开状态,您可以在任务管理器中看到它。

此外,您需要按照实例化它们的相反顺序释放对象 - wdDoc 之前 wdApp。

答案 1 :(得分:0)

在Word文档中设置一些DocVariables,然后在Excel中运行下面的代码。

Sub PushToWord()

Dim objWord As New Word.Application
Dim doc As Word.Document
Dim bkmk As Word.Bookmark
sWdFileName = Application.GetOpenFilename(, , , , False)
Set doc = objWord.Documents.Open(sWdFileName)
'On Error Resume Next

objWord.ActiveDocument.variables("BrokerFirstName").Value = Range("BrokerFirstName").Value
objWord.ActiveDocument.variables("BrokerLastName").Value = Range("BrokerLastName").Value
objWord.ActiveDocument.variables("Ryan").Value = Range("Ryan").Value


objWord.ActiveDocument.Fields.Update

'On Error Resume Next
objWord.Visible = True

End Sub

您可以通过在Word中设置书签,并将数据从Excel中的字段推送到Word中的字段(书签)来使用基本相同的过程。

Sub PushToWord()

Dim objWord As New Word.Application
Dim doc As Word.Document
Dim bkmk As Word.Bookmark
sWdFileName = Application.GetOpenFilename(, , , , False)
Set doc = objWord.Documents.Open(sWdFileName)
On Error Resume Next

    ActiveDocument.Variables("BrokerFirstName").Value = Range("B1").Value
    ActiveDocument.Variables("BrokerLastName").Value = Range("B2").Value
    ActiveDocument.Fields.Update

On Error Resume Next
objWord.Visible = True

End Sub

答案 2 :(得分:-3)

着名的希望 - 为所有带有标题的现场案例设置一个按钮:&#34;让它好起来!&#34;

在部分上划分任务:
- 从excel中获取&#34; ...文本...&#34;
- &#34;替换word doc中的文字...&#34;在previouse步骤中从Excel中获取文本

通过两个单独的程序为每个任务执行,
从第三个程序召集他们。