使用Excel中定义的范围,替换打开的Word文档中的[文本]

时间:2016-11-04 17:33:12

标签: vba excel-vba word-vba excel

我想做以下事情:

  1. 在Excel中,创建表格并定义范围(例如A1到B13是“Arf”,保存在文件中

  2. 使用VBA,从Excel移至打开的Word文档

  3. 在打开的Word文档中,搜索字符串(例如“[Table goes here]”)

  4. 用Excel定义的范围替换Word字符串(例如[Table goes here]替换为“Arf”)

  5. 我会为许多不同的表定义很多范围,并且根据我在Excel中使用的预定义表,我会宏将这个定义的范围导入到Word中的相应字符串

  6. 到目前为止,我已经找到了许多用于进入和更改文件位置文本的代码,但我希望这适用于当前打开的任何Word文件(同时在两个文件,Excel和Word中工作)。

    我真的没有现成的代码,因为我不知道该怎么做,但让我试着给出我在想的东西:

    Sub Replace_Word_String_with_Excel_Range()
    
    Application.Goto Reference:="Arf"
        Selection.Copy
    
    Application(Word).Find.Replacement
    With Selection.Find
        .Text = "[Table goes here]"
        .Replacement.value = "Arf"
    End With
    
    End Sub
    

    我觉得我可以创建一个Excel文件并创建模板,定义表格。我会把它们全部命名(例如Arf,Bark和Woof)。我不明白的是如何通过代码“alt-tab”到Word。我的另一个困惑是如何通过Replacement.Value函数粘贴整个Excel定义的部分。

    任何帮助解决这个问题都将非常感激。由于我正在积极研究这个问题,我将尝试编辑此帖子并进行相应更新。

    谢谢!

1 个答案:

答案 0 :(得分:2)

在Word中使用DocVariables。如果你不知道DocVariables是什么,只需做一点研究,看看如何设置和工作。然后,只需运行下面的脚本,并一如既往地修改以满足您的特定需求。

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("FirstName").Value = Range("FirstName").Value
objWord.ActiveDocument.variables("LastName").Value = Range("LastName").Value
objWord.ActiveDocument.variables("AnotherVariable").Value = Range("AnotherVariable").Value


objWord.ActiveDocument.Fields.Update

'On Error Resume Next
objWord.Visible = True

End Sub

此代码位于Excel中。别忘了在Excel中设置一个引用到MS Word。