在所有样式为“标题 1”的段落前插入分页型分节符
上一篇文章在文档中所有页面的页眉添加节标题并且链接到自动生成的目录,其中要求在所有样式为“标题 1”的段落前插入分页型分节符,如果碰上没有这样做的文章怎么办?可以用以下代码一次性插入:
Sub 在所有标题1段丽倩插入分页型分节符()Dim i, titleCount As Integer, aPara As ParagraphOn Error Resume Next'关闭屏幕滚动,提高代码执行效率Application.ScreenUpdating = Falsei = 0titleCount = 0' 取得样式为“标题 1”的段落的数量,不存在则退出' 用selection.find方法可以效率更高地找到样式为“标题 1”的段落,' 但不知道如何取得匹配结果的数量,查文档也没找到方法,暂且遍历文档For Each aPara In ActiveDocument.Paragraphs' 跳过样式为“标题 1”的空白段落If aPara.Style = "标题 1" And Len(aPara.Range.Text) > 1 ThentitleCount = titleCount + 1End IfNext' 没有样式为“标题 1”的段落则直接退出If titleCount = 0 ThenExit SubEnd If' 光标移动到文章开头Selection.HomeKey unit:=wdStoryDo' 将光标移动到下一个大纲级别为1的段落Do While Selection.Paragraphs(1).OutlineLevel > 1' 将光标移动到下一个标题段落,直至大纲级别为1停止循环Selection.GoTo what:=wdGoToHeading, which:=wdGoToNext, Count:=1LoopIf Len(Selection.Paragraphs(1).Range.Text) > 1 ThenSelection.InsertBreak Type:=wdSectionBreakNextPagei = i + 1End IfSelection.GoTo what:=wdGoToHeading, which:=wdGoToNext, Count:=1' 处理完了所有样式为“标题 1”的段落则退出循环If i >= titleCount ThenExit DoEnd IfLoop'恢复屏幕滚动Application.ScreenUpdating = True
End Sub
理论上这个任务应该用不到VBA,通过替换命令查找到所有样式为“标题1”的段落,并替换为分页型分节符加上查找内容应该可以更高效的完成任务,但是不知道如何在word查找替换对话框的替换栏中输入分页型分节符。此外,以上代码中取得文档中原有的样式为“标题1”的段落的数量的方法也比较笨拙,有更好方法的大神请赐教。
由于光标是按标题向前移动的,因为文档最后一页、最后一节或最后一段可能不存在样式为“标题1”的段落,光标可能无法到达文档结尾,所以没法用光标是否已到达文档末尾来判断是否已将文档中所有样式为“标题1”的段落全部处理完,只好用是比较已处理的样式为“标题1”的段落数量和文档中原有的样式为“标题1”的段落的数量来决定是否退出循环。如果光标按字符向前移动,则可以通过以下方式判断是否已到达文档结尾:
' 判断光标是否已到达文档结尾
If Selection.start = ActiveDocument.Content.End - 1 ThenExit Do
End If
当然,以本文的任务来说,安字符向前移动光标效率太低,并无必要。
只能说前面我实在太愚蠢了,拘泥在selection.goto思路里不能自拔,把一件这么简单的事做得那么复杂。下面这样直接操作光标才是简单正解:
Sub 在每个标题1段落前插入分页型分节符()Dim moved As Integer, aPara As ParagraphOn Error Resume Next'关闭屏幕滚动,提高代码执行效率Application.ScreenUpdating = FalseWith Selection' 光标移动至文档开头.HomeKey unit:=wdStoryDo' 将光标向前移动一个段落,并记录移动数量moved = .Move(unit:=wdParagraph, Count:=1)' selection.move方法返回0表示无法再向前移动,文档已处理完成,退出循环If moved < 1 ThenExit DoEnd If' 判断光标所在段落的样式名称及是不是空行If .Paragraphs(1).Style = "标题 1" And Len(.Paragraphs(1).Range.Text) > 1 Then' 在符合要求的段落前插入分页型分节符Selection.InsertBreak Type:=wdSectionBreakNextPageEnd IfLoopEnd With'恢复屏幕滚动Application.ScreenUpdating = True
End Sub
下面是VBA中常用光标操作汇总:
'移动光标至当前行首Selection.HomeKey unit:=wdLine'移动光标至当前行尾Selection.EndKey unit:=wdLine'选择从光标至当前行首的内容Selection.HomeKey unit:=wdLine, Extend:=wdExtend'选择从光标至当前行尾的内容Selection.EndKey unit:=wdLine, Extend:=wdExtend'选择当前行Selection.HomeKey unit:=wdLineSelection.EndKey unit:=wdLine, Extend:=wdExtend'移动光标至文档开始Selection.HomeKey unit:=wdStory'移动光标至文档结尾Selection.EndKey unit:=wdStory'选择从光标至文档开始的内容Selection.HomeKey unit:=wdStory, Extend:=wdExtend'选择从光标至文档结尾的内容Selection.EndKey unit:=wdStory, Extend:=wdExtend'选择文档全部内容Selection.WholeStory'移动光标至当前段落的开始Selection.MoveUp unit:=wdParagraph'移动光标至当前段落的结尾Selection.MoveDown unit:=wdParagraph'选择从光标至当前段落开始的内容Selection.MoveUp unit:=wdParagraph, Extend:=wdExtend'选择从光标至当前段落结尾的内容Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend'选择光标所在段落的内容Selection.MoveUp unit:=wdParagraphSelection.MoveDown unit:=wdParagraph, Extend:=wdExtend'显示选择区的开始与结束的位置,注意:文档第1个字符的位置是0MsgBox ("第" & Selection.Start & "个字符至第" & Selection.End & "个字符")'删除当前行Selection.HomeKey unit:=wdLineSelection.EndKey unit:=wdLine, Extend:=wdExtendSelection.Delete'删除当前段落Selection.MoveUp unit:=wdParagraphSelection.MoveDown unit:=wdParagraph, Extend:=wdExtendSelection.Delete'删除当前段落的另一种看来更简洁的方法Selection.Paragraphs(1).Range.Delete
在所有样式为“标题 1”的段落前插入分页型分节符相关推荐
- wps怎么删除分节符以及段落边框产生分隔线的取消方法
WPS文档中如何删除分节符? 点击工具栏"隐藏/显示编辑标记",就会看到分节符,看到后,应该知道如何删除了吧 点 菜单->工具->选项,弹出对话框->视图-> ...
- wps排版-一级标题设置段前段后两行,段前不显示格式和怎么删除下一页分节符,不改变格式
1. 问题 正常显示 2. 解决方法 (1)先清除"第1章 绪论"的段落布局,鼠标放在在"第1章 绪论"开头,点击---插入---分页----下一页分节符--- ...
- Microsoft.Office.Interop.Word 在某一段落前插入新的段落
试过两种方法: 第一种: 变量sig是段落类型,改变其text就可以了,换行添加一个\r: sig.Range.Text = "段落前插入一个新的段落\r" + sig.Range ...
- word段落间距调整:格式刷/取消对齐网格/分节符/擦除格式都无效的应对方法
找遍全网,段落格式无法调整无非下列5种: 1 段落选项中取消对齐到网格 2 段前未赋予数值(早期word文档) 3 段落前打一行,设置间距都为0 4 设置段前分页(针对标题段落无法修改的问题) 5 ( ...
- word排版----分节、页眉页脚、页码、制作标题样式
最近在用word写一些课程论文,被一些格式问题困扰许久,经过网上搜集资料加上自己的尝试,解决了部分问题,特此记录下. 标题样式的制作.略. 分节.主要涉及到分节符.附上一篇介绍分节符的文档. http ...
- Word中将一级标题设置为段前一行与段后一行时,不显示段前一行怎么办?
Word中将一级标题设置为段前一行与段后一行时,不显示段前一行怎么办? 把一级标题所在页称为当前页. 2.把光标定位在上一页的最后一行. 3.点击"布局"--"分隔符&q ...
- web快速入门之基础篇-html:2、基本标签之标题标签、段落标签、换行标签
目录 一.前言 二.简单实例介绍 实例代码 运行效果 三.要点说明 1.h1到h6 标题标签 2.p 段落标签 3.br 换行标签[单标记] 一.前言 上一篇文章我整理以前上学的笔记是初见 html ...
- 【Web】HTML(No.03)HTML标签 (一) 标题标签、段落标签、水平线标签、换行标签、div/span标签、图像标签、链接标签、base标签、特殊字符标签、注释标签、文本格式化标签
HTML标签分类 在HTML页面中,带有"< >"符号的元素被称为HTML标签,如上面提到的 HTML.head.body都是HTML骨架结构标签.所谓标签就是放在&q ...
- HTML学习 1(基本格式、标题标签、段落标签、图片标签)
1.Html基本格式(快捷键 !+ tab) <!DOCTYPE html> <html lang="en"> <head><meta c ...
最新文章
- socket 995 错误 boost
- 如何使用Android studio创建签名
- 200820C阶段一通用链表
- js 导出pdf上传至oss_js实现oss文件上传及一些问题
- TiDB 部署及数据同步
- MySQL多线程并发调优
- how to solve undefined reference in igllib
- mysql配置参数优化提示
- python UI自动化(一)
- NEMA-0183(GPGGA,GPRMC,GPGSA,GPGSV,GPVTG)详解
- 搭建PHP网站开发环境
- ux设计_我是一名开发人员,正在过渡到UX设计帮助
- 透过上网管理 看看上班时间员工都在干啥?
- 地铁收费系统课程设计总结
- 记一次被“呼死你”电话骚扰的反骚扰经历
- Linux 命令量测试
- 纽扣电池命名(常规表述)
- 基于OpenSfM的单目三维重建实现详细步骤
- python3 selenium web自媒体百家号企鹅号大鱼号acfun站,自动化上传视频以及经验总结分享
- PyTorch之填充操作