ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 在特定段落的段首添加字符

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-7-16 20:01 | 显示全部楼层 |阅读模式
本帖最后由 yym_0114 于 2016-7-16 20:06 编辑

我需要达到的效果是:在没有※标记的段落前加上※。举例:
※《齐齐哈尔市志稿·交通志》,内部发行,1988年,第6页。
※徐世昌等编纂:《东三省政略》,长春:吉林文史出版社,1989年。
※《齐齐哈尔市第二商业局志》,内部发行,1992年,第17-21页。
齐齐哈尔档案馆藏:《齐齐哈尔经济概况》。
齐齐哈尔档案馆藏:《黑龙江省城办理市政报告书》。
《齐齐哈尔市志·文化卷》,合肥:黄山书社, 1999年,第125-129页。
※齐齐哈尔市档案馆藏档案51-34-51。
※魏声和:《鸡林旧闻录》,长春:吉林文史出版社,1986年,第47页。
※丁世良、赵放编:《中国地方志民俗资料汇编》东北卷,北京:北京图书馆出版社,1989年。
[美]Walter Young:《美报之华人满洲移民运动观》,《东方杂志》1928年第25卷第24号。[美]Walter Young:《美报之华人满洲移民运动观》,《东方杂志》1928年第25卷第24号。
※丁世良、赵放编:《中国地方志民俗资料汇编》东北卷,北京:北京图书馆出版社,1989年。

我的思路是:先查找段前不带※的段落;然后判断该段落有几行,如果有一行,就用现在的代码,如果是一行以上,就增加一个把光标调整到段首的代码;最后用替换的方法加上※。
现在遇到的问题是这样的:上面三个一行的段落都没问题,但是最下面那个两行的段落,不管我怎么调整代码,※的位置总是在第二行之前,而不能到段首的位置。关键问题是,我不知道这个判断段落行数的代码该怎么写;或者能不能换一个思路来达到目的。这就要请教word VBA方面的高手了。多谢!

我现在的代码是这样的:
  1. Sub 宏6()
  2. Selection.Find.ClearFormatting
  3. Selection.Find.Replacement.ClearFormatting
  4.     With Selection.Find
  5.         .Text = "^13[!※]*^13"
  6.         .Replacement.Text = "^&"
  7.         .Forward = True
  8.         .Wrap = wdFindContinue
  9.         .MatchWildcards = True
  10.     End With
  11.     Selection.Find.Execute
  12.     Selection.MoveUp Unit:=wdParagraph, Count:=-1
  13.     Selection.MoveUp Unit:=wdLine, Count:=1

  14. With Selection.Find
  15.         .Text = "*^13"
  16.         .Replacement.Text = "※^&"
  17.         .Forward = True
  18.         .Wrap = wdFindStop
  19.         .MatchWildcards = True
  20.     End With
  21.     Selection.Find.Execute Replace:=wdReplaceOne
  22. End Sub
复制代码




补充内容 (2022-9-19 15:34):
已解决

TA的精华主题

TA的得分主题

发表于 2016-7-17 08:54 | 显示全部楼层
本帖最后由 13907933959 于 2016-7-17 11:21 编辑

网友好!
如果是每个没有的段落都加上※,你可试一下这个。

Sub 宏6()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "^13"
        .Replacement.Text = "^&※"
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "※※"
        .Replacement.Text = "※"
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "※^13"
        .Replacement.Text = "^13"
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub



TA的精华主题

TA的得分主题

发表于 2016-7-17 09:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 hhjjpp 于 2016-7-17 10:05 编辑
  1. Sub 宏6()
  2. With Selection.Find
  3.     .ClearFormatting
  4.     .Text = "^13[!※]"
  5.     .Replacement.Text = ""
  6.     .Forward = True
  7.     .Wrap = wdFindContinue
  8.     .MatchWildcards = True
  9.     .Execute
  10.     Selection.MoveRight Unit:=wdCharacter, Count:=1
  11.     Selection.HomeKey Unit:=wdLine
  12.     Selection.InsertBefore "※"
  13. End With
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-7-17 10:36 | 显示全部楼层
  1. Sub 宏6()
  2. Dim dline%, search As Boolean
  3. dline = ActiveDocument.Range.ComputeStatistics(wdStatisticLines)         '文档总行数
  4. With Selection.Find
  5.     .ClearFormatting
  6.     .Text = "^13[!※]"
  7.     .Replacement.Text = ""
  8.     .Forward = True
  9.     .Wrap = wdFindContinue
  10.     .MatchWildcards = True
  11.     Do
  12.          .Execute
  13.          search = Right(Selection.Text, 1) <> Chr(13)
  14.          Selection.MoveRight Unit:=wdCharacter, Count:=1
  15.          If search Then
  16.             Selection.HomeKey Unit:=wdLine
  17.             Selection.InsertBefore "※"
  18.          End If
  19.     Loop Until dline = Selection.Information(wdFirstCharacterLineNumber) '当前光标所在行数
  20. End With
  21. End Sub
复制代码

段首配齐指定字符-h.rar

7.85 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2016-7-17 19:12 | 显示全部楼层
请你测试:
Sub shishi()
    With CreateObject("VBscript.regexp")
        .Global = True: .IgnoreCase = False: .MultiLine = True
        .Pattern = "^(?!※|$)"
        ActiveDocument.Content.Text = .Replace(ActiveDocument.Content.Text, "※")
    End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-17 23:33 | 显示全部楼层
本帖最后由 yym_0114 于 2016-7-18 00:27 编辑
13907933959 发表于 2016-7-17 08:54
网友好!
如果是每个没有的段落都加上※,你可试一下这个。

非常感谢您的回复!实际测试之后没问题。虽然是分三步达到目的,但以我粗浅的VBA知识,可以很快理解代码的意思和思路。非常好!已经采纳您的回复了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-17 23:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

感谢您的回复!您的代码每次只能对一行进行修改。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-17 23:37 | 显示全部楼层

感谢您的回复!我把您的代码复制到我的word VBA里面,运行之后※标记在一个段落中无限复制,直到word崩溃。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-17 23:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2016-7-17 19:12
请你测试:
Sub shishi()
    With CreateObject("VBscript.regexp")

感谢您的回复!实际测试之后,您的代码可以达到我要的效果。但请恕我VBA知识有限,您的代码我没有看懂是什么原理。而且不知为什么,运行您的代码之后,我的段前空两格、红色字体的格式全都没了,都变成了左对齐的黑色字体。

TA的精华主题

TA的得分主题

发表于 2016-7-18 00:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yym_0114 发表于 2016-7-17 23:40
感谢您的回复!实际测试之后,您的代码可以达到我要的效果。但请恕我VBA知识有限,您的代码我没有看懂是 ...

段落缩进及字体格式等自己重新排版!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 19:46 , Processed in 0.026406 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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