VBA从另一个Word文档中的指定位置复制到Word中的一个文档包括

问题描述

我正在尝试将文本的确切部分从一个 Word 文档复制到另一个。这是一个文本示例:

—————————————————————

关于公司

啦啦啦啦啦啦

呜呜呜

呜呜呜

感谢关注

—————————————————————-

想象一下,文本位于 Word 的末尾。 所以我想复制从“关于公司”到“感谢您的关注”的全文,包括两者。 我下面的代码只复制了“关于公司”和“感谢您的关注”之间的内容,但我也需要复制它们(请不要建议添加额外的词以使代码找到它们,这在我的代码中是不可能的案件)。有什么想法吗?

Dim Pos As Word.Document
Set Pos = Documents(1)
Set myRange = Pos.Content
Dim IngStart As Long 
Dim IngEnd As Long 

With myRange.Find 
    .ClearFormatting 
    .Wrap = wdFindStop
    .MatchCase = False 
    .Text = "About the company" 
        If .Execute = False Then 
            MsgBox "'About the company' not found.",vbExclamation 
            Exit Sub 
        End If 
    myRange.Collapse Direction:=wdCollapseEnd 
    IngStart = myRange.End 
    .Text = "Thank you for attention" 
        If .Execute = False Then 
            MsgBox "'Thank you for attention' not found.",vbExclamation 
            Exit Sub 
        End If 
    IngEnd = myRange.Start 
End With 

Pos.Range(lngStart,lngEnd).copy 
    objWrdDoc.ContentControls(18).Range.PasteSpecial DataType:=2

先谢谢你!

解决方法

如果我理解正确,您希望在最终处理的范围内包含第一个搜索文本“关于公司”和第二个搜索文本“感谢您的关注”。

您当前的代码在第一次查找后很快就崩溃了 MyRange,而在第二次查找时您选择了错误的结束地址。我已经进行了修改,现在应该可以正常工作了。

Dim Pos As Word.Document
Set Pos = Documents(1)
Set myRange = Pos.Content
Dim IngStart As Long
Dim IngEnd As Long

With myRange.Find
    .ClearFormatting
    .Wrap = wdFindStop
    .MatchCase = False
    .Text = "About the company"
        If .Execute = False Then
            MsgBox "'About the company' not found.",vbExclamation
            Exit Sub
        End If
    IngStart = myRange.Start
    myRange.Collapse Direction:=wdCollapseEnd
    .Text = "Thank you for attention"
        If .Execute = False Then
            MsgBox "'Thank you for attention' not found.",vbExclamation
            Exit Sub
        End If
    IngEnd = myRange.End
End With

Pos.Range(lngStart,lngEnd).Copy
    objWrdDoc.ContentControls(18).Range.PasteSpecial DataType:=2
,

实际上,您只需要一个通配符 Find,其中:

查找 = 关于公司*感谢您的关注

你甚至不需要宏!那就是:

Sub Demo()
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Format = False
    .Forward = True
    .MatchWildcards = True
    .Wrap = wdFindContinue
    .Text = "About the company*Thank you for attention"
    .Execute
  End With
  If .Find.Found = True Then .Copy
End With
End Sub