ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何通过VBA对下列各小题进行排版

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-9 21:37 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请教:
如何通过VBA将附件中的排版前的内容批量替换成排版后的内容?
能否通过一段宏代码进行灵活设定每行为几小题(如3小题或4小题等),各小题制表位的大小能随页面大小及题数的变化而变化?如果不行,能否帮忙写其中一种(如替换“词汇”部分,将每行各小题设为三小题)的VBA代码?

[ 本帖最后由 tangqingfu 于 2009-5-9 21:45 编辑 ]

Unit2.rar

10.13 KB, 下载次数: 76

TA的精华主题

TA的得分主题

发表于 2009-5-9 23:58 | 显示全部楼层
可试试如下代码,其中每行小题数需指定,且对段落只拆分不合并。
Sub MultiTopic()
Dim myRange As Range, tabcount As Byte, tabwidth As Single, i As Byte
Application.ScreenUpdating = False
With Selection
    Set myRange = IIf(.Type = wdSelectionIP, ActiveDocument.Content, .Range)
    tabcount = Val(InputBox("请输入每个段落的小题数", , "4"))
    If tabcount < 1 Then Exit Sub
    tabwidth = myRange.PageSetup.TextColumns.Width / tabcount  '计算每个自定义制表位的间距
    For i = 1 To tabcount  '依次设置每个自定义制表位
        myRange.ParagraphFormat.TabStops.Add i * tabwidth
    Next
    myRange.Select
    With .Find
        .ClearFormatting
        .Text = "^95{3,}"  '查找内容(三个以上连续的下划线符号)
        .MatchWildcards = True
        i = 0  '计数复位
        Do While .Execute  '对匹配项目循环处理
            With .Parent
                If .End > myRange.End Then Exit Do  '匹配内容如超出指定范围则退出循环
                .Text = vbTab  '将匹配内容替换为制表符
                .Font.Underline = wdUnderlineSingle  '匹配内容应用下划线格式
                i = i + 1
                If i Mod tabcount = 0 And .End < .Paragraphs(1).Range.End - 1 Then .InsertAfter Chr(13)  '按指定制表符数拆分段落
                .Collapse wdCollapseEnd  '向后折叠匹配内容
            End With
        Loop
    End With
End With
Application.ScreenUpdating = True
End Sub

[ 本帖最后由 sylun 于 2009-5-10 17:57 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-5-10 06:35 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-10 07:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢sylun兄的帮忙!总体效果很不错!能否加入注释学习一下?
能否在代码中加入这样的情况:(我想在应该是在运行sylun兄代码前进行处理)
如果每行有段落标记则将其删除,如果小题序号前有半角空格或全角空格,则将其删除。详见"排版前"第二处的"词汇"和"词组"部分.
^95代表什么?

[ 本帖最后由 tangqingfu 于 2009-5-10 07:59 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-5-10 18:08 | 显示全部楼层
已在2楼添加了一些说明文字,查找内容也稍作了修改。其实以前也做过类似处理。
楼主新提出的两个要求未作一并处理,因感觉有不确定性,还是由楼主按实际情况酌情处理好点。比如查找内容可试改为“[^32^95]{3,}"  ,只是与“吃药”这样的下划线有冲突(感觉此种情形用分号分隔比空格要好些)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-10 23:29 | 显示全部楼层
谢谢sylun兄,收藏学习,有问题再请教!

TA的精华主题

TA的得分主题

发表于 2009-6-11 17:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
实用,谢楼主了

TA的精华主题

TA的得分主题

发表于 2015-6-16 17:47 | 显示全部楼层
高手,学习中~!~!~!~!~!真的见到的WORD 排版高手
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 02:59 , Processed in 0.022342 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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