ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 循环语句简化代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-5-16 10:08 | 显示全部楼层 |阅读模式
删除空白段落的代码如下:
Sub aaaaa()
    nmText = 10
    If Len(Trim(ActiveDocument.Paragraphs(nmText - 4).Range)) - 1 < 1 Then
       ActiveDocument.Paragraphs(nmText - 4).Range.Delete '删除行
    End If
    If Len(Trim(ActiveDocument.Paragraphs(nmText - 5).Range)) - 1 < 1 Then
       ActiveDocument.Paragraphs(nmText - 5).Range.Delete '删除行
    End If
    If Len(Trim(ActiveDocument.Paragraphs(nmText - 6).Range)) - 1 < 1 Then
       ActiveDocument.Paragraphs(nmText - 6).Range.Delete '删除行
    End If
    If Len(Trim(ActiveDocument.Paragraphs(nmText - 7).Range)) - 1 < 1 Then
       ActiveDocument.Paragraphs(nmText - 7).Range.Delete '删除行
    End If
    If Len(Trim(ActiveDocument.Paragraphs(nmText - 8).Range)) - 1 < 1 Then
       ActiveDocument.Paragraphs(nmText - 8).Range.Delete '删除行
    End If
End Sub
求助各位大神,用循环语句简化以上代码。谢谢

TA的精华主题

TA的得分主题

发表于 2017-5-16 10:35 | 显示全部楼层
Sub shishi()
    Dim p As Range
    Set p = IIf(Selection.Type = wdSelectionIP, ActiveDocument.Content, Selection.Range)
    If p = ActiveDocument.Content Then
        k = MsgBox("要进行全文处理吗?", vbYesNoCancel + vbQuestion, "全文处理判断")
        If k <> vbYes Then Exit Sub
    End If
    With p.Find
        .Execute "^13{2,}", , , 1, , , , 0, , "^p", 2
    End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-16 11:37 | 显示全部楼层
duquancai 发表于 2017-5-16 10:35
Sub shishi()
    Dim p As Range
    Set p = IIf(Selection.Type = wdSelectionIP, ActiveDocument.Con ...

谢谢,duquancai兄!不用全文搜索,允许其他地方有空白段,只是在nmText - 4到nmText - 8段落间处理。

TA的精华主题

TA的得分主题

发表于 2017-5-16 12:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ke3088 发表于 2017-5-16 11:37
谢谢,duquancai兄!不用全文搜索,允许其他地方有空白段,只是在nmText - 4到nmText - 8段落间处理。

你 选择 后再运行!!!!!

TA的精华主题

TA的得分主题

发表于 2017-5-16 13:09 | 显示全部楼层
本帖最后由 kqbt 于 2017-5-16 13:14 编辑

在源代码上修改一下,便于对循环的最基本理解:
    nmText = 10
    nmNum = 4
    do while nmNum <= 8
        If Len(Trim(ActiveDocument.Paragraphs(nmText - nmNum).Range)) - 1 < 1 Then
            ActiveDocument.Paragraphs(nmText - nmNum).Range.Delete '删除行
        End If
        nmNum = nmNum + 1
    loop

但是从你源代码来看,每删除一个段落之后,因为 nmNum 这个数值是 + 1 递增的,那么就会有一个段落被跳过。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-16 15:11 | 显示全部楼层
duquancai 发表于 2017-5-16 12:38
你 选择 后再运行!!!!!

谢谢,duquancai兄!我并不知道nmText是第几段,nmText在这里是假设的,真正环境是由代码确定的,因此不能选择第几段。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-16 15:13 | 显示全部楼层
kqbt 发表于 2017-5-16 13:09
在源代码上修改一下,便于对循环的最基本理解:
    nmText = 10
    nmNum = 4

kqbt兄,谢谢!我试试,先谢为敬。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-16 15:25 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-5-27 00:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
kqbt 发表于 2017-5-16 13:09
在源代码上修改一下,便于对循环的最基本理解:
    nmText = 10
    nmNum = 4

将您的代码修改如下:
    '删除最后空白行
    Do While Len(ActiveDocument.Paragraphs.Last.Range) = 1
       ActiveDocument.Paragraphs.Last.Range.Delete
   Loop
一直这样用都没有问题,今天有问题出现,就是最后一行是空白行,上一行是表格时,运行后出现死循环。
怎么修改为好?谢谢

TA的精华主题

TA的得分主题

发表于 2019-5-27 08:24 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 08:46 , Processed in 0.024551 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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