ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

怎样用循环语句来简化代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-7-15 10:18 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sub 循环三次()

      Selection.Find.ClearFormatting
        With Selection.Find
        .Text = "龥1.*龥"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    Selection.moveleft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Cut
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "﨩1.*﨩"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    Selection.Extend
    Selection.moveleft Unit:=wdCharacter, Count:=1
    Selection.Collapse direction:=wdCollapseEnd
    Selection.PasteAndFormat (wdFormatOriginalFormatting)


    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "龥2.*龥"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    Selection.moveleft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Cut
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "﨩2.*﨩"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    Selection.Extend
    Selection.moveleft Unit:=wdCharacter, Count:=1
    Selection.Collapse direction:=wdCollapseEnd
    Selection.PasteAndFormat (wdFormatOriginalFormatting)

    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "龥3.*龥"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    Selection.moveleft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Cut
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "﨩3.*﨩"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    Selection.Extend
    Selection.moveleft Unit:=wdCharacter, Count:=1
    Selection.Collapse direction:=wdCollapseEnd
    Selection.PasteAndFormat (wdFormatOriginalFormatting)
end sub

上面代码分三段,但我不会用循环语句来编写代码,哪位大神帮我编写一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-7-15 10:20 | 显示全部楼层
还有一个问题:能不能在执行若干次后,找不到查找的匹配项时,自动结束运行

TA的精华主题

TA的得分主题

发表于 2022-7-15 18:22 | 显示全部楼层
* 楼主,不知道你是查找什么关键字,但一般用下面的代码查找比较好(请将代码复制到 Word 2019 新建空白文档中,再全选,剪切,关闭不保存空白文档,按 Alt + F11 进入 VBE,再按 Ctrl + End 将光标定位于代码最后面,按 Ctrl + V 粘贴;然后,关闭 VBE,按 Alt + F8 找到本宏)。
  1. Sub a_FindActiveDocument()
  2. '全文查找/光标不动/不激活对象/速度极快!
  3.     With ActiveDocument.Content.Find
  4.         .ClearFormatting
  5.         .Text = "[0-9.,,  ^s^t]{1,}元"
  6.         .Forward = True
  7.         .MatchWildcards = True
  8.         Do While .Execute
  9.             With .Parent
  10.                 .Font.Color = wdColorRed
  11. '                .Start = .End
  12.             End With
  13.         Loop
  14.     End With
  15. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-7-16 06:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2022-7-15 18:22
* 楼主,不知道你是查找什么关键字,但一般用下面的代码查找比较好(请将代码复制到 Word 2019 新建空白文 ...

指上面的问题:就是代码循环了三次,假如需要循环30次,怎样编写一个循环语句的简化代码?

TA的精华主题

TA的得分主题

发表于 2022-7-16 10:29 | 显示全部楼层
循环语句不只一种,有指定循环次数的,有不指定循环次数的,楼主,你最好把所要实现的问题提出来,这样比较好,到底找到某个词后还想怎么做。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-7-16 22:32 | 显示全部楼层
413191246se 发表于 2022-7-16 10:29
循环语句不只一种,有指定循环次数的,有不指定循环次数的,楼主,你最好把所要实现的问题提出来,这样比较 ...

代码共分三段,第一段,参数是“1”,第二段,参数是“2”,第三段,参数是“3”,……
怎样用变量(例如i)代替参数1、2、3……,作为循环来完成。

TA的精华主题

TA的得分主题

发表于 2022-7-17 20:34 | 显示全部楼层
  1. Sub a_717_Find()
  2.     Dim i&
  3.     With Selection
  4.         .HomeKey 6
  5.         For i = 1 To 3
  6.             With .Find
  7.                 .ClearFormatting
  8.                 .Text = "abc"
  9.                 .Replacement.Text = ""
  10.                 .Forward = True
  11.                 .MatchWildcards = True
  12.                 .Execute
  13.                 With .Parent
  14.                     .Font.Color = wdColorRed
  15.                 End With
  16.             End With
  17.         Next i
  18.     End With
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-7-19 13:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

一、选择题
1.(2022江西南昌期中)方程x2+2x-1=0的两根分别为x1,x2,则下列结论正确的是        (    )
A.x1+x2=2,x1x2=1        B.x1+x2=2,x1x2=-1        C.x1+x2=-2,x1x2=-1        D.x1+x2=-2,x1x2=1
2.(2022湖北荆州月考)已知关于x的一元二次方程x2-bx+c=0的两根互为相反数,则        (    )
A.b=0        B.c=0        C.b>0        D.b<0
3.(2022山东济南历城期中)若关于x的一元二次方程x2-kx-3=0的一个根是3,则方程的另一个根是        (    )
A.-1        B.1        C.2        D.-2
4.(2020四川内江隆昌月考)在下列方程中,以3,-4为根的一元二次方程是        (    )
A.x2-x-12=0        B.x2+x-12=0        C.x2-x+12=0        D.x2+x+12=0
5.(2021浙江宁波模拟)若关于x的一元二次方程(x-b)2=a的两根为1和3,则a,b的值分别为        (    )
A.1,2        B.4,1        C.1,-2        D.4,-1


【参考答案】
1.【答案】C
【解析】根据根与系数的关系得x1+x2=-2,x1x2=-1.
2.【答案】A
【解析】∵关于x的一元二次方程x2-bx+c=0的两根互为相反数,∴两根之和为0,即b=0,故选A.
3.【答案】A
【解析】设方程的另一个根为a,∴3a=-3,解得a=-1.
4.【答案】B
【解析】由选项设方程为x2+bx+c=0,∵该方程的根为3和-4,∴-b=3+(-4),解得b=1;c=3x(-4)=-12,∴x2+x-12=0(经检验满足题意).故选B.
5.【答案】A
【解析】方程(x-b)2=a整理得x2-2bx+b2-a=0,∵关于x的一元二次方程(x-b)2=a的两根为1和3,∴2b=1+3=4,b2-a=1×3=3,∴b=2,a=1(经检验满足题意).

要求:每道题后面插入答案与解析,怎么用VBA循环语句做?

TA的精华主题

TA的得分主题

发表于 2022-7-20 12:28 | 显示全部楼层
  1. Sub a720_test()
  2.     Dim r As Range, s As Range, t As Range, i As Paragraph, j&, m&, n&
  3.    
  4.     ActiveDocument.Content.Find.Execute "^l", , , 0, , , , , , "^p", 2
  5.    
  6.     With ActiveDocument.Content.Find
  7.         .ClearFormatting
  8.         .Text = "^13[一二三四五六七八九十百零]{1,}、*^13"
  9.         .Forward = True
  10.         .MatchWildcards = True
  11.         Do While .Execute
  12.             With .Parent
  13.                 .MoveStart
  14.                 .Select
  15.                 Selection.InsertBefore Text:="BigTitle"
  16.                 .Start = .End
  17.             End With
  18.         Loop
  19.     End With
  20.    
  21.     With ActiveDocument.Content.Find
  22.         .ClearFormatting
  23.         .Text = "^13BigTitle[一二三四五六七八九十百零]{1,}、*^13"
  24.         .Forward = True
  25.         .MatchWildcards = True
  26.         Do While .Execute
  27.             With .Parent
  28.                 .MoveStart
  29.                 .Select
  30.                 With Selection
  31.                     Do
  32.                         .MoveEnd 4
  33.                     Loop Until .Paragraphs.Last.Range Like "BigTitle*" Or .End = ActiveDocument.Content.End
  34.                     .MoveEnd 4, -1
  35.                     Set r = .Range
  36.                     For Each i In r.Paragraphs
  37.                         If Asc(i.Range) = 13 Then i.Range.Delete
  38.                     Next
  39.                     
  40.                     If .Text Like "*参考答案*" Then
  41.                         For Each i In r.Paragraphs
  42.                             If i.Range Like "#.*" Or i.Range Like "##.*" Or i.Range Like "###.*" Then
  43.                                 i.Range.InsertBefore Text:="SmallTitle"
  44.                             End If
  45.                         Next
  46.                         With r
  47.                             .Find.Execute "^p", , , 0, , , , , , "`", 2
  48.                             .Find.Execute "`SmallTitle", , , 0, , , , , , "^p", 2
  49.                             .Find.Execute "`(?参考答案?)", , , 1, , , , , , "^13\1", 2
  50.                             .Characters.Last.Text = vbCr
  51.                         End With
  52.                         Do
  53.                             .MoveEnd 4, -1
  54.                         Loop Until .Paragraphs.Last.Range Like "?参考答案?" & vbCr
  55.                         .MoveEnd 4, -1
  56.                         Set s = .Range
  57.                         m = s.Paragraphs.Count
  58.                         
  59.                         Set t = ActiveDocument.Range(s.End, r.End)
  60.                         t.Select
  61.                         n = t.Paragraphs.Count
  62.                         
  63.                         If m = n Then
  64.                             For j = m To 1 Step -1
  65.                                 If j > 1 Then s.Paragraphs(j).Range.Characters.Last.InsertBefore Text:="linkoutlinkout" & Replace(t.Paragraphs(j).Range.Text, vbCr, "")
  66.                             Next
  67.                         End If
  68.                     End If
  69.                     t.Delete
  70.                 End With
  71.                 .Start = .End
  72.             End With
  73.         Loop
  74.     End With
  75.     With ActiveDocument.Content.Find
  76.         .Execute "BigTitle", , , 0, , , , , , "", 2
  77.         .Execute "(linkoutlinkout)(*)(【答案)", , , 1, , , , , , "^13\3", 2
  78.         .Execute "`", , , 0, , , , , , "^p", 2
  79.     End With
  80.     Selection.HomeKey 6
  81.     MsgBox "Complete!", 0 + 48
  82. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-7-20 16:53 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 03:09 , Processed in 0.043315 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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