ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 562|回复: 5

[求助] 请看看这段代码哪里出错了啊?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-1-5 00:14 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png

一个word里有很多“答案”,我想用下面这段代码替换第3个、第6个、第9个,每次运行下面这段代码的时候,只替换第3个,for那里不是循环3次吗?先查找2次,第3次查找的时候替换1次,然后再循环这段代码第2次,不应该是接着往下查找2次,然后替换第6个吗?
请各位指点下,我想错了吗?

Sub test()
    Dim myrange As Range, i As Integer
    Set myrange = ActiveDocument.Range
    With myrange.Find
        .Text = "答案"
        .Replacement.Text = "解析"
        .Forward = True
    End With

    For i = 1 To 3
       With myrange.Find
           .Execute
           .Execute
           .Execute Replace:=wdReplaceOne
       End With
    Next i

End Sub


TA的精华主题

TA的得分主题

发表于 2022-1-5 11:06 | 显示全部楼层
  1. Sub test2()
  2.     Dim MyRange As Range, i As Integer
  3.     Set MyRange = ActiveDocument.Range
  4.     With MyRange.Find
  5.         .Text = "答案"
  6.         .Replacement.Text = "解析"
  7.         .Replacement.Font.ColorIndex = wdRed
  8.         .Replacement.Font.Underline = wdUnderlineSingle
  9.         .Forward = True
  10.     End With

  11.     For i = 1 To 3
  12.        With MyRange.Find
  13.            .Execute
  14.             MyRange.SetRange Start:=MyRange.End, End:=ActiveDocument.Content.End

  15.            .Execute
  16.             MyRange.SetRange Start:=MyRange.End, End:=ActiveDocument.Content.End
  17.            
  18.            .Execute Replace:=wdReplaceOne
  19.            MyRange.SetRange Start:=MyRange.End, End:=ActiveDocument.Content.End
  20.        End With
  21.     Next i

  22. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-1-5 12:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

Sub test()
    Dim n As Integer, myrange As Range, s As Long
    Set myrange = ActiveDocument.Range
    Do
        With myrange.Find
            .Text = "答案"
            .Execute
            If .Found = True Then
                n = n + 1
                s = .Parent.End
                If n Mod 3 = 0 Then .Parent.Text = "解析"
                myrange.SetRange s, ActiveDocument.Range.End
            Else
                Exit Do
            End If
        End With
    Loop
    ActiveDocument.Save
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-1-5 23:23 | 显示全部楼层
MyRange.SetRange Start:=MyRange.End, End:=ActiveDocument.Content.End

谢谢,这句话太重要了,摆放位置和内容都很好的教导了我,原来除了Range,还可用Content。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-1-5 23:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
limonet 发表于 2022-1-5 12:06
Sub test()
    Dim n As Integer, myrange As Range, s As Long
    Set myrange = ActiveDocument.Ra ...

这段代码实在是看不大懂,自己写的那个代码能弄懂,就是差那么一点,看了2楼的,终于搞定了,也谢谢你的热心回答。

TA的精华主题

TA的得分主题

发表于 2022-1-6 11:36 | 显示全部楼层
楼主,你好!——我最近新发布了《Word 2003 & 2019 通用模板宏(2022元旦版)》,主要是公文自动排版,还有其它一些宏。你可以下载后仔细看一下说明文档 Readme.txt ,导入到通用模板后,有不少宏可以借鉴一下。比如:查找替换其实有三种类型:一是查找全文(Sub FindActiveDocument);二是查找选定范围(Sub FindRange);三是从插入点向后查找(Sub FindSelection)。其实,在 Range 里面查找,开始我也弄不清,一般要配合 .Select;如果觉得难,可以先用 Selection 对象比较容易一些,好理解一些;ActiveDocument 对象比较抽象,要配合 .Select 方法才好。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 12:24 , Processed in 0.043564 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表