ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] word自动化排版宏

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-1-12 14:36 | 显示全部楼层 |阅读模式
自己制作的word自动化排版宏,水平低,很粗糙!还有一些功能未实现,希望高手多多指点,把里面一些多余的代码删减掉,另外再添加一些功能!例如怎样能循环判断最后一页如果只有不到三分之一页的几行时,通过减小行距和字号从而去除最后一页。再者就是大家比较认可的正规排版格式(字号、行距等等)是什么?我想通过做这个东西,我们能有效地提高工作效率,又无需借助其他软件。下面将全部代码奉上!
  1. Sub 格式设置()
  2. '
  3. ' 格式设置 Macro
  4. ' 宏在 2008-9-23 由 陈凯 制作
  5. '
  6.     Application.ScreenUpdating = False
  7.     '更改所有硬回车为软回车
  8.     Selection.Find.ClearFormatting
  9.     Selection.Find.Replacement.ClearFormatting
  10.     With Selection.Find
  11.         .Text = "^l"
  12.         .Replacement.Text = "^p"
  13.         .Forward = True
  14.         .Wrap = wdFindContinue
  15.         .Format = False
  16.         .MatchCase = False
  17.         .MatchWholeWord = False
  18.         .MatchByte = True
  19.         .MatchWildcards = False
  20.         .MatchSoundsLike = False
  21.         .MatchAllWordForms = False
  22.     End With
  23.     Selection.Find.Execute Replace:=wdReplaceAll
  24.     '去除所有空行
  25.     Dim i As Paragraph, n As Integer
  26.     Application.ScreenUpdating = False
  27.     For Each i In ActiveDocument.Paragraphs
  28.     If Len(i.Range) = 1 Then
  29.     i.Range.Delete
  30.     n = n + 1
  31.     End If
  32.     Next
  33.     Application.ScreenUpdating = True
  34.     '去除半角空格
  35.     Selection.Find.ClearFormatting
  36.     Selection.Find.Replacement.ClearFormatting
  37.     With Selection.Find
  38.         .Text = " "
  39.         .Replacement.Text = ""
  40.         .Forward = True
  41.         .Wrap = wdFindContinue
  42.         .Format = False
  43.         .MatchCase = False
  44.         .MatchWholeWord = False
  45.         .MatchByte = True
  46.         .MatchWildcards = False
  47.         .MatchSoundsLike = False
  48.         .MatchAllWordForms = False
  49.     End With
  50.     Selection.Find.Execute Replace:=wdReplaceAll
  51.     '去除全角空格
  52.     Selection.Find.ClearFormatting
  53.     Selection.Find.Replacement.ClearFormatting
  54.     With Selection.Find
  55.         .Text = " "
  56.         .Replacement.Text = ""
  57.         .Forward = True
  58.         .Wrap = wdFindContinue
  59.         .Format = False
  60.         .MatchCase = False
  61.         .MatchWholeWord = False
  62.         .MatchByte = True
  63.         .MatchWildcards = False
  64.         .MatchSoundsLike = False
  65.         .MatchAllWordForms = False
  66.     End With
  67.     Selection.Find.Execute Replace:=wdReplaceAll
  68.     '替换非标准引号为标准引号
  69.     Selection.Find.ClearFormatting
  70.     Selection.Find.Replacement.ClearFormatting
  71.     With Selection.Find
  72.         .Text = """(*)"""
  73.         .Replacement.Text = ChrW(8220) & "\1" & ChrW(8221)
  74.         .Forward = True
  75.         .Wrap = wdFindContinue
  76.         .Format = False
  77.         .MatchCase = False
  78.         .MatchWholeWord = False
  79.         .MatchByte = False
  80.         .MatchAllWordForms = False
  81.         .MatchSoundsLike = False
  82.         .MatchWildcards = True
  83.     End With
  84.     Selection.Find.Execute Replace:=wdReplaceAll
  85.     '字母数字符号全角转半角 Macro
  86.     Dim qjsz, bjsz As String, iii As Integer '定义qjsz(全角数字)、bjsz(半角数字)为字符串型,iii为整数型
  87.         qjsz = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,./<>?;’:[]{}\|=-+_)(*%$#@!`~&"
  88.         bjsz = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,。/《》?;':【】{}\|=-+_)(×%$#@!'~&"
  89.         Selection.WholeStory
  90.     For iii = 1 To 95 '循环10次
  91.     With Selection.Find
  92.        .Text = Mid(qjsz, iii, 1) 'mid函数:返回文本字符串中从指定位置开始的特定数目的字符,每次取一个数字
  93.        .Replacement.Text = Mid(bjsz, iii, 1) '将用于替换的相应位置的半角数字
  94.        .Format = False '保留替换前的字符格式
  95.        .MatchWildcards = False
  96.        .Execute Replace:=wdReplaceAll '用半角符号替换全角符号
  97.     End With
  98.     Next iii
  99.     '修改小数点错误
  100.     Selection.Find.ClearFormatting
  101.     Selection.Find.Replacement.ClearFormatting
  102.     With Selection.Find
  103.         .Text = "([0-9])。([0-9])"
  104.         .Replacement.Text = "\1.\2"
  105.         .Forward = True
  106.         .Wrap = wdFindContinue
  107.         .Format = False
  108.         .MatchCase = False
  109.         .MatchWholeWord = False
  110.         .MatchByte = False
  111.         .MatchAllWordForms = False
  112.         .MatchSoundsLike = False
  113.         .MatchWildcards = True
  114.     End With
  115.     Selection.Find.Execute Replace:=wdReplaceAll
  116.     '设置字号
  117.     Selection.WholeStory  '全选
  118.     Selection.ClearFormatting  '清除全文格式
  119.     Selection.Font.Size = 14  '设置字号为14号
  120.     '设置行距
  121.     Selection.ParagraphFormat.LineSpacingRule = wdLineSpaceExactly
  122.     Selection.ParagraphFormat.LineSpacing = 25
  123.     Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify  '设置文本为两端对齐
  124.     Selection.ParagraphFormat.CharacterUnitFirstLineIndent = 2  '设置段首缩进2字符
  125.     Selection.HomeKey Unit:=wdStory  '移至文首
  126.     Selection.EndKey Unit:=wdLine, Extend:=wdExtend  '选中首行
  127.     Selection.ClearFormatting  '清除首行格式
  128.     Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter  '设置首行居中对齐
  129.     Selection.ParagraphFormat.LineUnitBefore = 1  '设置首行段前间距1行
  130.     Selection.ParagraphFormat.LineUnitAfter = 1  '设置首行段后间距1行
  131.     Selection.Font.Name = "微软雅黑"  '设置首行字体为“微软雅黑”
  132.     Selection.Font.Size = 18  '设置首行字号为18号
  133.     Selection.Font.Bold = wdToggle  '设置首行字形为加粗
  134.     Application.ScreenUpdating = True
  135. End Sub
复制代码

[ 本帖最后由 怀英慕者 于 2009-1-12 15:30 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-1-17 23:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-1-18 15:15 | 显示全部楼层
学习一下,能演示一下用法吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-18 15:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 4楼 XUZHANCHENG 的帖子

这还要演示一下用法吗?在word里面打开VB编辑器,把代码复制过去,然后在工具栏自定义一个按钮,使这个按钮调用这个宏就可以了,很简单啊!

TA的精华主题

TA的得分主题

发表于 2010-5-26 21:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-5-26 22:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-5-27 22:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-5-28 15:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-8-25 23:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如果要选定第二段或第二行,怎么改代码??谢谢请教中

Selection.HomeKey Unit:=wdStory  '移至文首
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend  '选中首行
    Selection.ClearFormatting  '清除首行格式
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter  '设置首行居中对齐
    Selection.ParagraphFormat.LineUnitBefore = 1  '设置首行段前间距1行
    Selection.ParagraphFormat.LineUnitAfter = 1  '设置首行段后间距1行
    Selection.Font.Name = "微软雅黑"  '设置首行字体为“微软雅黑”
    Selection.Font.Size = 18  '设置首行字号为18号
    Selection.Font.Bold = wdToggle  '设置首行字形为加粗

TA的精华主题

TA的得分主题

发表于 2010-8-29 17:27 | 显示全部楼层
呵呵,这个高难度啊,楼主水平太高了,俺就慢慢学习吧
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-10 08:49 , Processed in 0.039794 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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