ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助:如何用代码自动设置标题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-17 10:48 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有的人的的文档不设标题格式,即,标题也应用正文格式,尽管有时候他采用文字加粗、加大字号,或或插入空行等方式来突出标题,但由于没有采用word的标题格式,这类文档处理起来很不方便,例如不能应用大纲视图查看文档整体结构,不能自动生成目录等等,虽然可以用手工一个一个地设定标题,但是对于一篇很长的文档,我希望找出一种方式让word自动加上标题格式。
我首先想到了应用替换功能来实现,并且通过两次替换成功地达到目的,但是当我把替换过程录制为宏时,word居然不能复原手动替换的操作,出现错误的替换。我用的是2003版。我的VBA水平太差了,请求大侠设计一个VBA代码来实现这个功能。下面给出我的实例,实例1是没有处理的原始文件状态,实例2是处理后要达到的目的的状态。

顺便告知我的替换方案。第一步,使用通配符,查找栏:^13[!,、;:!。?“”……][一-龥]{1,16}^13 ,替换栏:什么也不填,但是把字体颜色设定为红色;
第二步,查找栏:[一-龥]{1,16}^13 ,替换栏:什么不填(也可以填入^&),格式标题1 。

我对标题的定义:新起行,不超过17个字符(这个可以酌情改变),句尾不带标点符号

样例2(处理后).rar

2.85 KB, 下载次数: 11

样例1(处理前).rar

2.78 KB, 下载次数: 11

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-17 10:56 | 显示全部楼层
补充说明:
上面的替换介绍忘了一项,订正一下:“第二步,查找栏:[一-龥]{1,16}^13 ,替换栏:什么不填(也可以填入^&),格式标题1 。”
应为:“第二步,查找栏:[一-龥]{1,16}^13 ,设定字体颜色为红色,替换栏:什么不填(也可以填入^&),格式标题1 。”
忘掉了查找栏中应设置为特定颜色,若不设定word会锁死

TA的精华主题

TA的得分主题

发表于 2014-11-17 11:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个论坛里 有经典的帖子,请自己仔细找。

TA的精华主题

TA的得分主题

发表于 2014-11-17 11:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
给你个简单的例子
可以用instr函数 改写复杂些
Sub test01()
Dim mypar As Paragraph
For Each mypar In ActiveDocument.Paragraphs
    If VBA.Len(mypar.Range) < 17 And Right(mypar.Range.Text, 1) <> "。" Then
        mypar.Style = "标题 1"
    End If
Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-17 11:54 | 显示全部楼层
pipiludaxian 发表于 2014-11-17 11:33
这个论坛里 有经典的帖子,请自己仔细找。

谢谢您的回复,也谢谢您对我上一个帖子的帮助,上一个帖子由于我的粗心给大家造成不爽,再次致歉

TA的精华主题

TA的得分主题

发表于 2014-11-17 12:00 | 显示全部楼层
Sub test01()
Dim mypar As Paragraph
For Each mypar In ActiveDocument.Paragraphs
    If VBA.Len(mypar.Range) < 17 And Right(mypar.Range.Text, 1) <> "。" And Len(mypar.Range) <> 1 Then
        mypar.Style = "标题 1"
    End If
Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-17 12:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
pipiludaxian 发表于 2014-11-17 12:00
Sub test01()
Dim mypar As Paragraph
For Each mypar In ActiveDocument.Paragraphs

感谢大侠热心,上个帖子我粗心给大家造成不爽,已经再三道歉,看到您还为我解答问题非常高兴也非常感谢。
您的代码非常好用!
代码中“And Right(mypar.Range.Text, 1) <> "。" ”应该是以句号结尾的,可以不可以多列一些标点符号,标题应该无标点符号,我想在加上常用的一些标点,如:,。:;“”!?……等等,可以直接把这些符号加到代码中吗,如何加入呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-17 13:08 | 显示全部楼层
pipiludaxian 发表于 2014-11-17 12:00
Sub test01()
Dim mypar As Paragraph
For Each mypar In ActiveDocument.Paragraphs

进一步的试验,发现您的代码对于以句号结尾的句子识别无效,在样例中我把部分标题后面加上句号,执行代码,所有标题一样地设定为标题1,看来只有字符数限制起作用,句尾标点符号条件设定不起作用,我的意思是,加了标点符号就不应识别为标题。

TA的精华主题

TA的得分主题

发表于 2014-11-17 18:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
(mypar.Range.Text, 1)  改为 (mypar.Range.Text, 2)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-18 11:52 | 显示全部楼层
pipiludaxian 发表于 2014-11-17 18:40
(mypar.Range.Text, 1)  改为 (mypar.Range.Text, 2)

改到(mypar.Range.Text, 2)了,还是不行,与没改前一样,对于加了句号的标题仍然认作标题。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 07:27 , Processed in 0.025135 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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