ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 遍历文章段落的时候跳过表格

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-3-16 08:57 | 显示全部楼层 |阅读模式
本帖最后由 kerry786032 于 2018-3-16 15:55 编辑

琢磨几天,终于想到这个代码可以在遍历文章段落的时候跳过表格,要不然有些大的表格在里面,遍历的时候会非常慢。希望大家提点意见,水平不咋地,见笑。




Sub skip_table()
Dim i As Integer
    Dim p As paragraph
    Dim Select_count As Integer
    Dim myrange As Range
    Dim table_count As Integer
    selection.HomeKey wdStory
On Error Resume Next
    selection.EndKey unit:=wdStory
    selection.Find.ClearFormatting

    With selection.Find
        .Text = "1. Introduction"
        .MatchWildcards = False
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
    End With
    selection.Find.Execute

    selection.collapse wdCollapseEnd
Set myrange = ActiveDocument.Range(Start:=ActiveDocument.Paragraphs(1).Range.Start, End:=selection.Range.End)
    table_count = myrange.Paragraphs.count
    For i = table_count To ActiveDocument.Paragraphs.count

    If ActiveDocument.Paragraphs(i).Range.Information(wdWithInTable) Then
    ActiveDocument.Paragraphs(i).Range.Select

        selection.MoveDown unit:=wdParagraph, count:=1
        selection.Tables(1).Range.Select
        Select_count = selection.Range.Paragraphs.count

        i = i + Select_count - 3
        ActiveDocument.Paragraphs(i).Range.Characters(1).Select
        selection.HomeKey unit:=wdLine

        Else
        ActiveDocument.Paragraphs(i).Range.Style = ActiveDocument.Styles("_4_text")


    End If
    Next i
End Sub

TA的精华主题

TA的得分主题

发表于 2018-3-16 13:57 | 显示全部楼层
本帖最后由 wdpfox 于 2018-3-16 14:01 编辑

多谢老师慷慨分享好资料!我水平低,要学习才能懂的。
      Oooo
      (___)
  oooO    )_/
  (___)   (_/
   \_(
   \_)

TA的精华主题

TA的得分主题

发表于 2018-3-16 14:46 | 显示全部楼层
楼主,你的问题我喜欢,也想寻找更好的跳过表格只处理文本的方法!——但是,我实践以后,怀疑楼主是否清醒,是否认真测试了文本。

TA的精华主题

TA的得分主题

发表于 2018-3-16 14:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
另外,楼主,我的《Word2003通用模板宏(2018元旦版)》代码,只须一键 F8 即可自动处理公文排版,你是否研究过?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-16 15:55 | 显示全部楼层
413191246se 发表于 2018-3-16 14:46
楼主,你的问题我喜欢,也想寻找更好的跳过表格只处理文本的方法!——但是,我实践以后,怀疑楼主是否清醒 ...

经过这段时间测试,已更改 i = i + Select_count - 1为 i = i + Select_count - 3,有哪些问题,还请指出?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-16 15:56 | 显示全部楼层
413191246se 发表于 2018-3-16 14:47
另外,楼主,我的《Word2003通用模板宏(2018元旦版)》代码,只须一键 F8 即可自动处理公文排版,你是否研 ...

暂时没有,是否可以麻烦给个链接?一定拜读!!!

TA的精华主题

TA的得分主题

发表于 2018-3-16 22:25 | 显示全部楼层
kerry786032 发表于 2018-3-16 15:55
经过这段时间测试,已更改 i = i + Select_count - 1为 i = i + Select_count - 3,有哪些问题,还请指出 ...

既然是“分享贴”,谢谢分享,那就没什么好说的了!

TA的精华主题

TA的得分主题

发表于 2018-3-17 13:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-3-17 13:14 | 显示全部楼层
* 楼主,你的态度很好,钻研精神可嘉!谢谢!
* 但是,楼主你的代码,我测试以后,发现文档没有任何变化,我仍然怀疑楼主头脑是否清醒?
* 或许,是我水平太低,不能理解?

TA的精华主题

TA的得分主题

发表于 2018-3-17 13:17 | 显示全部楼层
* 楼主,我昨天下午重新写了 3 种跳过表格只处理文字的代码,请参考:
  1. Sub a计算宏运行所用时间()
  2.     Dim t As Single
  3.     t = Timer
  4.     test1 '宏名-------test1=.101'---->第一种方法最快!
  5.     MsgBox "OK!用时 " & Timer - t & " 秒!", vbOKOnly + vbExclamation, "计算宏运行所用时间"
  6. End Sub
  7. Sub test1()
  8. '目标:设置表格外文字为红色!
  9.     Dim d As Document
  10.     Set d = ActiveDocument

  11. '方法1:Do...Loop逐段循环------用时 .109/.101/.104秒
  12. '    On Error Resume Next
  13.     d.Content.InsertAfter Text:="`"
  14.     d.Paragraphs(1).Range.Select
  15.     With Selection
  16.         Do
  17.             If Selection Like "*`*" Then Exit Do
  18.             If .Information(wdWithInTable) = False Then
  19.                 .Font.Color = wdColorRed
  20.                 .Next(unit:=wdParagraph, Count:=1).Select
  21.             Else
  22.                 .Tables(1).Range.Next(unit:=wdParagraph, Count:=1).Select
  23.             End If
  24.         Loop
  25.     End With
  26. End Sub
  27. Sub test2()
  28. '方法2:独创/原创-----------用时:.519/.531/.539秒
  29.     On Error Resume Next
  30.     Dim doc As Document, t As Table, i As Paragraph, j&, k&, r As Range, v&
  31.     Set doc = ActiveDocument

  32.     If doc.Paragraphs(1).Range.Information(wdWithInTable) = False Then
  33.         Selection.HomeKey unit:=wdStory
  34.         doc.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1
  35.         v = 1
  36.     End If

  37.     For Each t In doc.Tables
  38.         With t.Range
  39.             .Rows.WrapAroundText = False
  40.             .Rows.Alignment = wdAlignRowCenter
  41.             .Previous(unit:=wdParagraph, Count:=1).Characters.Last.InsertBefore Text:="`"
  42.         End With
  43.     Next
  44.     doc.Content.InsertAfter Text:="`"

  45.     k = doc.Tables.Count
  46.     Do
  47.         j = j + 1
  48.         doc.Tables(j).Range.Next(unit:=wdParagraph, Count:=1).Characters(1).Select
  49.         Selection.MoveEndUntil cset:="`", Count:=wdForward
  50.         Selection.MoveEnd unit:=wdCharacter, Count:=2

  51.         Selection.Font.Color = wdColorRed

  52.         Selection.Characters.Last.Previous.Delete
  53.     Loop Until j = k
  54.     If v = 1 Then doc.Tables(1).Delete
  55. End Sub
  56. Sub test3()
  57. '方法3:循环遍历段落法------用时:.941/.906/.910秒
  58.     Dim i As Paragraph
  59.     For Each i In ActiveDocument.Paragraphs
  60.         If i.Range.Information(wdWithInTable) = False Then i.Range.Font.Color = wdColorRed
  61.     Next
  62. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-2 12:50 , Processed in 0.042094 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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