目的:在遍历word文档 ,当发现字符“普通地热水洗井循环时间”,在其后插入数据
问题:RANG 选定的范围应该有限制,不能遍历到字符“普通地热水洗井循环时间”处
有什么解决方法吗 ,如果不用RANG ,有其他方法吗 。
有问题的代码:
Set RangeTemplate = objWordTemplate.Range(Start:=0, End:=objWordTemplate.Range.End)附代码:
Sub fun1() '打开的Excel文件路径
Dim strCurPath As String
'新生成的文件名称
Dim strFileName As String
Dim objWordApp As Word.Application
Dim objWordTemplate As Word.Document
Dim RangeTemplate As Word.Range
Dim i As Integer i = 0
strFileName = Trim(Sheets(strSheetInputName).Range("B5").Value) & "_" & Trim(Sheets(strSheetInputName).Range("A9").Value) & "_" & Format(Now, "yyyymmdd")
'关闭宏提示
Application.DisplayAlerts = False
Set objWordApp = CreateObject("Word.Application")
'查看 Documents 集合以判定名为“TemplateWord.doc”的文档是否已打开。如果该文档包含在 Documents 集合中,则激活该文档;否则,打开该文档。 Set objWordTemplate = objWordApp.Documents.Open(ThisWorkbook.Path & "\TemplateWord2.doc")
'遍历新生成的文档,定位到“普通地热水洗井循环时间”,在其后加入
'Set RangeTemplate = objWordTemplate.Range(Start:=0, End:=objWordTemplate.ActiveWindow.Selection.End) 选定范围太小
'Set RangeTemplate = objWordTemplate.Range(Start:=objWordTemplate.Paragraphs(1).Range.Start, End:=objWordTemplate.Paragraphs(50).Range.End) 选定范围太小
' Set RangeTemplate = objWordTemplate.Range(Start:=0, End:=100000) '数值超出范围
Set RangeTemplate = objWordTemplate.Range(Start:=0, End:=objWordTemplate.Range.End) For Each aWord In RangeTemplate.Words If aWord.Text = "普通地热水洗井循环时间" Then
aWord.InsertAfter "New text "
End If
Next aWord
'MsgBox "There are " & objWordTemplate.ActiveWindow.Selection.Words.Count & " words."
'
' Documents("TemplateWord.doc").Close SaveChanges:=wdDoNotSaveChanges
'
objWordTemplate.Close
objWordApp.Quit
End Sub
问题:RANG 选定的范围应该有限制,不能遍历到字符“普通地热水洗井循环时间”处
有什么解决方法吗 ,如果不用RANG ,有其他方法吗 。
有问题的代码:
Set RangeTemplate = objWordTemplate.Range(Start:=0, End:=objWordTemplate.Range.End)附代码:
Sub fun1() '打开的Excel文件路径
Dim strCurPath As String
'新生成的文件名称
Dim strFileName As String
Dim objWordApp As Word.Application
Dim objWordTemplate As Word.Document
Dim RangeTemplate As Word.Range
Dim i As Integer i = 0
strFileName = Trim(Sheets(strSheetInputName).Range("B5").Value) & "_" & Trim(Sheets(strSheetInputName).Range("A9").Value) & "_" & Format(Now, "yyyymmdd")
'关闭宏提示
Application.DisplayAlerts = False
Set objWordApp = CreateObject("Word.Application")
'查看 Documents 集合以判定名为“TemplateWord.doc”的文档是否已打开。如果该文档包含在 Documents 集合中,则激活该文档;否则,打开该文档。 Set objWordTemplate = objWordApp.Documents.Open(ThisWorkbook.Path & "\TemplateWord2.doc")
'遍历新生成的文档,定位到“普通地热水洗井循环时间”,在其后加入
'Set RangeTemplate = objWordTemplate.Range(Start:=0, End:=objWordTemplate.ActiveWindow.Selection.End) 选定范围太小
'Set RangeTemplate = objWordTemplate.Range(Start:=objWordTemplate.Paragraphs(1).Range.Start, End:=objWordTemplate.Paragraphs(50).Range.End) 选定范围太小
' Set RangeTemplate = objWordTemplate.Range(Start:=0, End:=100000) '数值超出范围
Set RangeTemplate = objWordTemplate.Range(Start:=0, End:=objWordTemplate.Range.End) For Each aWord In RangeTemplate.Words If aWord.Text = "普通地热水洗井循环时间" Then
aWord.InsertAfter "New text "
End If
Next aWord
'MsgBox "There are " & objWordTemplate.ActiveWindow.Selection.Words.Count & " words."
'
' Documents("TemplateWord.doc").Close SaveChanges:=wdDoNotSaveChanges
'
objWordTemplate.Close
objWordApp.Quit
End Sub
总结如下
1、objWordTemplate.Range(Start:=0)可以包含全文,我只看调试的监控器以为只选定一个小的范围
(建议用debug.print myRang)
2、用如下遍历,有问题 ,问题在哪,不知道。改用rang.find.excute
If aWord.Text = "普通地热水洗井循环时间" Then
aWord.InsertAfter "New text "
End If
Next aWord
3、改后如下。
Set myRange = objWord.Content
Debug.Print myRange.Text
myRange.Find.ClearFormatting
myRange.Find.Execute findText:="普通地热水洗井循环时间", Forward:=True
If myRange.Find.Found = True Then myRange.InsertAfter " This is now the last sentence in paragraph one."但又出现问题问题:方法”Excute”作用于”Find”对象时失败
原因:声明造成的 dim myRange as word.rang
解决:将这个声明注释掉
不能这样声明 ,有点奇怪
到此问题解决
BTW:Word查找下一个的热键是Shift-F4