问题描述
我正在尝试将文本的确切部分从一个 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