ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] word宏 将以数字开头的段落最后增加*号

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-6-20 15:33 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
word宏 将以数字开头的段落最后增加*号如何做?
我搜索了全论坛 找到更改以数字开头段落样式的例子,但没有增加的,我尝试增加不成功请高手帮指点下。
现有代码:
  1. Sub 测试11()
  2. '
  3. ' 测试11 宏
  4. '
  5. '
  6.     Dim KeyWord As String                                '声明变量
  7.     Dim i As String                                      '声明变量
  8.     KeyWord = "1"    '输入框选择值赋值给变量
  9.     If KeyWord = "" Then Exit Sub                        '如果输入框为空,则退出过程(过程叫 Sub)
  10.     i = vbYes
  11.     Selection.HomeKey wdStory                             '光标移到文档首
  12.     Do                                                    'DO...LOOP 循环
  13.         With Selection.Find                               'WITH 语句(查找)
  14.             .Text = KeyWord                               '查找某词,平时是 .Text="要点"
  15.             .Wrap = wdFindStop                            '找到后停止
  16.             .Forward = True                               '向前查找
  17.         End With                                          'WITH 语句结束
  18.         If Selection.Find.Execute = False Then Exit Do    'IF条件语句(如果找不到则退出 DO 循环)
  19.         If i = vbYes Then                                 '消息框 MsgBox 提问:如果“是”则(关键词在段首则设置为黑体、红色)
  20.             Selection.Paragraphs(1).Range.Select          '选择光标所在段落
  21.             If (Left(Selection.Text, Len(KeyWord))) = KeyWord Then     '如果查找到的关键词所在段落左取 N 个字符正好等于关键词的话,则
  22.                 Selection.Paragraphs(1).Range.Select      '选择光标所在段落
  23.                 With Selection.Font                       'WITH 语句(字体格式)
  24.                     .Bold = True                          '加粗(是)
  25.                     .name = "仿宋_GB2312"                        '中文字体名字(黑体)
  26.                     .Size = 14                            '字号12磅(四号)
  27.                 End With                                  '结束 WITH 语句
  28.                 Selection.EndKey Unit:=wdLine             '光标移到行尾
  29.             Else                                          '否则
  30.                 Selection.MoveDown Unit:=wdParagraph      '向下移动一段
  31.             End If                                        '结束 IF 语句
  32.         Else                                              '消息框 MsgBox 提问:如果“否”则(关键词在段中则设置为楷体、绿色)
  33.             Selection.Paragraphs(1).Range.Select          '选择光标所在段落
  34.             With Selection.Font                           'WITH 语句(字体格式)
  35.                 .Color = wdColorGreen                     '颜色(绿色)
  36.                 .Bold = True                              '加粗(是)
  37.                 .name = "仿宋_GB2312"                     '中文字体名字(楷体)
  38.                 .name = "Times New Roman"                 '英文字体名字(Times New Roman 音译:泰姆斯·妞·罗曼,这个英文字体比较通用\美观\正规)
  39.                 .Size = 12                                '字号12磅(四号)
  40.             End With                                      '结束 WITH 语句
  41.             Selection.EndKey Unit:=wdLine                 '光标移到行尾
  42.         End If                                            '结束 IF 语句
  43.     Loop                                                  'DO...LOOP 循环结束
  44.     Selection.HomeKey Unit:=wdStory                       '光标移到文档首
  45. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2016-6-20 16:24 | 显示全部楼层
请测试:
Sub test()
    Dim S As Range, reg As Object
    Set reg = CreateObject("VBscript.regexp")
    Set S = IIf(Selection.Type = wdSelectionIP, ActiveDocument.Content, Selection.Range)
    With reg
        .Global = True: .IgnoreCase = False: .MultiLine = True
        .Pattern = "^(\d+[^\r]*)(\r)"
        S = .Replace(S, "$1" & "*" & "$2")
    End With
    Set S = Nothing: Set reg = Nothing
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-20 16:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
duquancai 发表于 2016-6-20 16:24
请测试:
Sub test()
    Dim S As Range, reg As Object

多谢大神解决问题,先解燃眉之急  完了找书系统学习

TA的精华主题

TA的得分主题

发表于 2016-6-20 21:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
duquancai 发表于 2016-6-20 16:24
请测试:
Sub test()
    Dim S As Range, reg As Object

这个$1,$2,是什么意思

TA的精华主题

TA的得分主题

发表于 2016-6-21 06:58 | 显示全部楼层
duquancai 发表于 2016-6-20 16:24
请测试:
Sub test()
    Dim S As Range, reg As Object

前辈好!
这个代码需可以完美的将以数字开头的段落末尾加上*号,但也会改变原文档的所有格式,如不改变原文档的所有格式能否办到。恳请前辈赐教!谢谢!

TA的精华主题

TA的得分主题

发表于 2016-6-21 12:38 | 显示全部楼层
本帖最后由 duquancai 于 2016-6-21 14:53 编辑
13907933959 发表于 2016-6-21 06:58
前辈好!
这个代码需可以完美的将以数字开头的段落末尾加上*号,但也会改变原文档的所有格式,如不改变 ...

上面代码也不是你说的那样:“改变了所有”格式只是部分格式。请你测试下面代码
Sub test2()
    Dim reg As Object, i As Paragraph
    Dim mt, mts As Object, oRang As Range, n%, m%
    Set reg = CreateObject("vbscript.regexp")
    On Error Resume Next
    For Each i In ActiveDocument.Paragraphs
        With reg
            .Pattern = "^\d+[^\r]*"
            .Global = True: .IgnoreCase = False
            Set mts = .Execute(i.Range.Text)
            For Each mt In mts
                m = mt.firstindex
                n = mt.Length
                Set oRang = ActiveDocument.Range _
                (i.Range.Start + m, i.Range.Start + m + n)
                 oRang.InsertAfter "*"
            Next
        End With
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2016-6-21 14:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
duquancai 发表于 2016-6-21 12:38
上面代码也不是你说的那样:“改变了所有”格式,只是部分格式。请你测试下面代码
Sub test2()
    Dim ...

前辈好!
罪过、用词不准,还请你原谅!
不知什么原因,代码运行后提示:编译错误,子过程或函数未定义,代码中Range被选中,还请前辈再看看。

TA的精华主题

TA的得分主题

发表于 2016-6-21 14:40 | 显示全部楼层
13907933959 发表于 2016-6-21 14:26
前辈好!
罪过、用词不准,还请你原谅!
不知什么原因,代码运行后提示:编译错误,子过程或函数未定义 ...

我的office2010能用。
你可你把  : “Set oRang = Range _
                (i.Range.Start + m, i.Range.Start + m + n)”
改为:“Set oRang = ActiveDocument.Range _
                (i.Range.Start + m, i.Range.Start + m + n)”

TA的精华主题

TA的得分主题

发表于 2016-6-21 16:15 | 显示全部楼层
本帖最后由 13907933959 于 2016-6-22 09:01 编辑
duquancai 发表于 2016-6-21 14:40
我的office2010能用。
你可你把  : “Set oRang = Range _
                (i.Range.Start + m, i.Ra ...

前辈好!
谢谢您的再次的回复!这次OK了,佩服前辈的实力!
前辈、如要在数字开头的段落末尾加一个任意字符(包括任意中文字符),要怎样修改,求再赐教!谢谢!

TA的精华主题

TA的得分主题

发表于 2016-6-21 17:35 | 显示全部楼层
13907933959 发表于 2016-6-21 16:15
前辈好!
谢谢您的再次的回复!这次OK了,佩服前辈的实力!
前辈、如要在数字开头的段落末尾加一个任意 ...

'在数字开头的段落末尾加一个或者多个任意字符:
Sub 数字开头段尾加字符()
    Dim reg As Object, i As Paragraph, oStr$
    Dim mt, mts As Object, oRang As Range, n%, m%
    Set reg = CreateObject("vbscript.regexp")
    oStr = InputBox("请输入任意字符:", "数字开头段尾加字符...")
    If oStr = "" Then Exit Sub
    For Each i In ActiveDocument.Paragraphs
        With reg
            .Pattern = "^\d+[^\r]*"
            .Global = True: .IgnoreCase = False
            Set mts = .Execute(i.Range.Text)
            For Each mt In mts
                m = mt.firstindex
                n = mt.Length
                Set oRang = ActiveDocument.Range _
                (i.Range.Start + m, i.Range.Start + m + n)
                oRang.InsertAfter oStr
            Next
        End With
    Next
End Sub

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 17:31 , Processed in 0.039615 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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