我有一个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.
我需要我的Excel宏来查找指定标志之间的文本块"文本X"和"测试X结束"然后获取文本的副本(不包括标志)并将其粘贴到指定位置的第二个Word文档中。
我已经尝试调整堆栈交换上发布的许多解决方案但是无法将这些解决方案编译和/或运行,因为大多数人似乎都认为我是在Word而不是Excel中编写我的宏。 / p>
我在Excel中工作的原因是我正在通过Excel界面访问的现有Excel宏套件中添加功能。
代码的当前状态是:
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
目前停止编辑:
{if rng1.Find.Execute(FindText:=" Text 2")Then}
" .Find"突出显示并且"参数不是可选的"错误消息
答案 0 :(得分:1)
Excel和Word都有一个Range
对象。因为您在Excel VBA中但是尝试引用Word Range
对象,所以您需要限定变量声明,以便Excel知道您正在使用Word Range
对象。
Dim rng1 As Word.Range
Dim rng2 As Word.Range
您也不需要使用ActiveDocument
,因为您已使用inDoc
创建了对文档的引用。因此,在您的代码中,将ActiveDocument
替换为inDoc
。
进行了这些更改之后,您的代码示例使用了一个小型测试文档。