Excel VBA将标记文本从一个单词文件复制到另一个单词文件

我有一个Word文件包含标记的文本块,即:

Text 1 Text 1 Line 1 Text 1 Line 2 Text 1 End Text 2 Text 2 Line 1 Text 2 Line 2 Text 2 Line 3 . . Text 2 Line N Text 2 End etc. 

我需要我的Excelmacros来查找指定标志“Text X”和“Test X End”之间的文本块,然后获取文本的副本(不包括标志),并将其粘贴到指定位置的第二个Word文档中。

我已经尝试过调整堆栈交换中发布的许多解决scheme,但一直无法让这些编译和/或运行,因为大多数人似乎认为我正在从Word而不是Excel写我的macros。

我在Excel中工作的原因是,我正在向通过Excel接口访问的现有Excelmacros套件添加function。

代码的当前状态是:

 Sub Word_In_Word_Out() Application.ScreenUpdating = False Path = ThisWorkbook.Path Set wrdApp = CreateObject("Word.Application") wrdApp.Visible = True Set inDoc = wrdApp.Documents.Open(Path & "\" & "Word Input" & ".docx") inDoc.Activate Dim rng1 As Range Dim rng2 As Range Dim strTheText As String Set rng1 = ActiveDocument.Range If rng1.Find.Execute(FindText:="Text 2") Then Set rng2 = ActiveDocument.Range(rng1.End, ActiveDocument.Range.End) If rng2.Find.Execute(FindText:="Text 2 End") Then strTheText = ActiveDocument.Range(rng1.End, rng2.Start).Text MsgBox strTheText End If End If End Sub 

目前停止编译:

{如果rng1.Find.Execute(FindText:=“Text 2”)Then}

与“.Find”突出显示和一个“参数不可选”错误信息

Excel和Word都有一个Range对象。 由于您在Excel VBA中但正在尝试引用Word Range对象,因此您需要限定variables声明,以便Excel知道您正在使用Word Range对象。

 Dim rng1 As Word.Range Dim rng2 As Word.Range 

您也不需要使用ActiveDocument因为您已经使用inDoc创build了对文档的引用。 所以在你的代码中用inDocreplaceActiveDocument

做了这些修改后,你的代码示例使用一个小的testing文档为我工作。