目的:在遍历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

解决方案 »

  1.   

    没玩过VBA, 不过思路我倒是有个, 直接通过Word对象得到Word文本, 然后用 Replace替换掉指定的文本就好了吧
      

  2.   

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

  3.   

    开始记录宏,手动操作一遍,结束记录宏,看对应的VBA源代码。
    BTW:Word查找下一个的热键是Shift-F4