RANG 范围限制,导致不能遍历到期望的位置

来源:互联网 发布:薛之谦淘宝店叫什么 编辑:程序博客网 时间:2024/06/04 13:45

目的:在遍历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
------------------------问题解决  begin---------

 

 

问题解决
总结如下
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 
解决:将这个声明注释掉
不能这样声明 ,有点奇怪
到此问题解决
------------------------问题解决  end ---------

 

原创粉丝点击