Vba 用Excel中的文本替换Word文档中的文本

Vba 用Excel中的文本替换Word文档中的文本,vba,excel,replace,ms-word,Vba,Excel,Replace,Ms Word,我希望在excel中创建一个via脚本,用excel中的一些文本替换word文档中的文本保持器 我可以通过脚本打开word文档,然后用新名称保存文档。但是,它不会执行替换文本部分:( Private子命令按钮1\u单击() 作为对象的应用程序 Dim wdDoc作为对象 Set wdApp=CreateObject(“Word.Application”) wdApp.Visible=False 设置wdDoc=wdApp.Documents.Open(“临时docx”) 使用wdDoc.Cont

我希望在excel中创建一个via脚本,用excel中的一些文本替换word文档中的文本保持器

我可以通过脚本打开word文档,然后用新名称保存文档。但是,它不会执行替换文本部分:(

Private子命令按钮1\u单击()
作为对象的应用程序
Dim wdDoc作为对象
Set wdApp=CreateObject(“Word.Application”)
wdApp.Visible=False
设置wdDoc=wdApp.Documents.Open(“临时docx”)
使用wdDoc.Content.Find
.ClearFormatting
.Text=“”
替换
.ClearFormatting
.Font.Bold=True
.Text=“约翰·史密斯”
以
.Execute Replace:=wdReplaceAll
以
wdDoc.SaveAs2文件名:=(“temp2.docx”)
设置wdApp=Nothing
设置wdDoc=Nothing
端接头
我尝试在这里搜索,但看不出哪里出错:(


目前,它打开word doc并以新名称保存,但不替换查找和替换文本。有人能看到我哪里出了问题,并告诉我如何纠正吗?

著名的希望-所有实时案例都有一个按钮,标题为:“确定!”

不要将任务分为几个部分:
-获取“…来自excel的文本…”
-“替换word文档中的文本…”为上一步从Excel获取的文本

对于每项任务,通过两个单独的过程完成,
从第三个程序中调用它们


.

当我在Word中为您的问题描述设置测试时,通过键入,我看到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
与Excel不同,Word不会在其对象超出范围(宏结束)时自动退出。它将保持打开状态,您可以在任务管理器中看到这一点


此外,您需要以与实例化对象相反的顺序释放对象—wdDoc在wdApp之前。

在Word文档中设置一些DOCVALIALES,并从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中的字段(书签)


你说的文本持有者是什么意思?你有单词“”吗在word文档中?是的,真的应该称之为占位符。这只是为了更容易找到替换为所需文本的位置。计划是有一个表单,可以作为word文档打开和编辑,或者用excel表单填写。在word中查找书签的概念。您使用它时不需要查找/替换。至于您拥有什么:您是确定您键入了并且这不是合并字段吗?如果是,您需要将Word.Range对象设置为wdDoc.Content并使用Find。此外,set wdApp=Nothing必须跟在set wdDoc=Nothing后面。如果您使wdApp不可见,则必须退出它,否则您将它在内存中打开,这是一个坏主意。我尝试了一下,但没有成功工作。然后我尝试将占位符文本更改为“仅名称”,并再次搜索该文本,但仍然不起作用。不过,我已执行了“关闭并退出”以防止内存丢失。我还查看了书签程序,并已成功使其工作,因此可能会在我的项目中使用它。谢谢您的帮助。@EuanLivingstone好的,如果它不起作用,然后在您的文档中有一些(其他)奇怪的东西-在您的问题描述中不明显的东西。查找在Word中起作用。您正在搜索的文本是否实际使用粗体格式?此查找是针对粗体的,因为您在给我们的代码中有粗体。您可以对此进行测试,以向自己证明查找有效(现在我的贡献确实回答了你的问题)。
sWdFileName=Application.GetOpenFilename(,,False)
你能解释一下这行代码在这里做什么吗?
sWdFileName
代表什么吗??
wdDoc.Close
wdApp.Quit
Set wdDoc = Nothing
Set wdApp = Nothing
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
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