ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 附件(宏)2019-8-22 最新——请各位朋友自行更新!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-23 00:02 | 显示全部楼层 |阅读模式
* 功能:自动将落款后的附件名称复制到落款前并设置符合公文要求的格式,无需人工校对(建议看两眼)。
* 亮点:通过在每个附件名称前插入制表符实现自动对齐,再也无需手动调整。
* 更新:请打开 Word2003/2007,按 Alt + F8 组合键,打开宏名列表,找到“附件”宏,点击右侧“删除”按钮,在回答询问时点“是”,删除附件宏。然后点击“编辑”按钮,进入 VBE 中,按 Ctrl + End 将光标移至代码区最下面,将最新《附件》宏代码复制粘贴于此,然后,关闭代码区窗口,再关闭 Word,重新进入后就可以使用了。
  1. Sub 附件()
  2. '更新/2019-8-22/定稿
  3.     Dim s As Range, r As Range, i As Paragraph, j&, k&, n&, t$
  4.     With Selection
  5.         If .Type = wdSelectionIP Then Exit Sub Else Set s = .Range
  6.         .EndKey 5
  7.         With .Find
  8.             .ClearFormatting
  9.             .Text = "[^13^12]附件*^13"
  10.             .Forward = True
  11.             .MatchWildcards = True
  12.             Do While .Execute
  13.                 With .Parent
  14.                     If Asc(.Text) = 13 Then
  15.                         .Characters(1).InsertAfter Text:=Chr(12)
  16.                         .MoveStart 1, 2
  17.                     Else
  18.                         .MoveStart
  19.                     End If
  20.                     .MoveEnd 1, -1
  21.                     If .Previous.Previous.Previous.Information(12) Then .Previous.Previous.Delete
  22.                     n = n + 1
  23.                     .Text = "附件" & n
  24.                     With .Font
  25.                         .NameFarEast = "黑体"
  26.                         .NameAscii = "Times New Roman"
  27.                         .Bold = True
  28.                         .Color = wdColorRed
  29.                     End With
  30.                     With .ParagraphFormat
  31.                         .CharacterUnitFirstLineIndent = 0
  32.                         .FirstLineIndent = CentimetersToPoints(0)
  33.                     End With
  34.                     .Next(4, 1).Select
  35.                     If Not (.Next.Information(12)) Then
  36.                         If Not (.Next(4, 1) Like "*[。::_ ]*" Or .Next(4, 1) Like "[一1][、..]*" Or .Next(4, 1) Like "([一1])*" Or .Next(4, 1) Like "第一*") Then
  37.                             .MoveEnd 4, 1
  38.                             .Paragraphs(1).Range.Characters.Last.Delete
  39.                         End If
  40.                     End If
  41.                     If Not (.Next.Information(12)) Then
  42.                         If Not (.Next(4, 1) Like "*[。::_ ]*" Or .Next(4, 1) Like "[一1][、..]*" Or .Next(4, 1) Like "([一1])*" Or .Next(4, 1) Like "第一*") Then
  43.                             .MoveEnd 4, 1
  44.                             .Paragraphs(1).Range.Characters.Last.Delete
  45.                         End If
  46.                     End If
  47.                     .MoveEnd 1, -1
  48.                     .Text = Replace(.Text, " ", "")
  49.                     .Text = Replace(.Text, " ", "")
  50.                     .Text = Replace(.Text, vbTab, "")
  51.                     .Text = Replace(.Text, ChrW(160), "")
  52.                     .MoveEnd
  53.                     t = t & .Text
  54.                     With .Font
  55.                         .NameFarEast = "宋体"
  56.                         .NameAscii = "Times New Roman"
  57.                         .Size = 20
  58.                         .Bold = True
  59.                         .Color = wdColorAutomatic
  60.                     End With
  61.                     With .ParagraphFormat
  62.                         .CharacterUnitFirstLineIndent = 0
  63.                         .FirstLineIndent = CentimetersToPoints(0)
  64.                         .Alignment = wdAlignParagraphCenter
  65.                     End With
  66.                     If .Range.ComputeStatistics(1) > 1 Then
  67.                         If Len(.Text) < 31 Then 缩成一行
  68.                     End If
  69.                     If .Text Like "*[)”]?" Then .InsertBefore Text:=" "
  70.                     .InsertParagraphBefore
  71.                     .Characters.Last.InsertBefore Text:=vbCr
  72.                     .EndKey 5
  73.                     k = 1
  74.                 End With
  75.             Loop
  76.         End With
  77.         If k = 0 Then Exit Sub
  78.         If n = 1 Then .Previous(4, 1).Previous(4, 1).Previous(4, 1).Characters.Last.Previous.Delete
  79. '''
  80.         s.Select
  81.         .HomeKey 6, 1
  82.         With .Find
  83.             .ClearFormatting
  84.             .Text = "^13附件"
  85.             .Forward = True
  86.             .MatchWildcards = True
  87.             .Execute
  88.             If .Found = True Then
  89.                 With .Parent
  90.                     .MoveStart
  91.                     Do
  92.                         .MoveDown 4, 1, 1
  93.                     Loop Until .Text Like "*" & vbCr & vbCr
  94.                     .MoveEnd 1, -1
  95.                     .Next.Delete
  96.                     Set r = .Range
  97.                 End With
  98.             Else
  99.                 Set r = s.Previous(4, 1).Previous.Previous.Previous
  100.             End If
  101.         End With
  102.         With r
  103.             .Text = vbCr & t & vbCr
  104.             With .Font
  105.                 .Size = s.Font.Size
  106.                 .Bold = False
  107.                 .Color = wdColorViolet
  108.             End With
  109.             .MoveStart
  110.             .MoveEnd 1, -1
  111.             With .Paragraphs(1).Range.ParagraphFormat
  112.                 .CharacterUnitLeftIndent = 3.05
  113.                 .CharacterUnitFirstLineIndent = -4.62
  114.             End With
  115.             If n > 1 Then
  116.                 .MoveStart 4, 1
  117.                 For Each i In .Paragraphs
  118.                     With i.Range.ParagraphFormat
  119.                         .CharacterUnitLeftIndent = 7.7
  120.                         .CharacterUnitFirstLineIndent = -1.56
  121.                     End With
  122.                 Next
  123.                 .MoveStart 4, -1
  124.             End If
  125.             For Each i In .Paragraphs
  126.                 j = j + 1
  127.                 If n = 1 Then
  128.                     i.Range.InsertBefore Text:=vbTab
  129.                 Else
  130.                     i.Range.InsertBefore Text:=j & "." & vbTab
  131.                 End If
  132.             Next
  133.             .InsertBefore Text:="附件:"
  134.             If n = 1 Then .ParagraphFormat.CharacterUnitFirstLineIndent = -3.1
  135.             For Each i In .Paragraphs
  136.                 With i.Range
  137.                     If .ComputeStatistics(1) > 1 Then
  138.                         .Characters.Last.Select
  139.                         With Selection
  140.                             .MoveStart 5, -1
  141.                             If Len(.Text) = 2 Then
  142.                                 .MoveStart 5, -1
  143.                                 If .Text Like "*.*" Then
  144.                                     ActiveDocument.Range(Start:=.Characters(InStr(.Text, vbTab) + 2).Start, End:=.Characters.Last.End).Select
  145.                                 Else
  146.                                     If n = 1 Then
  147.                                         .MoveStart 1, 5
  148.                                     Else
  149.                                         .MoveStart
  150.                                     End If
  151.                                 End If
  152.                                 .Font.Spacing = -0.4
  153.                             End If
  154.                         End With
  155.                     End If
  156.                 End With
  157.             Next
  158.         End With
  159.     End With
  160. '''
  161.     If n = 1 Then
  162.         With Selection
  163.             .Expand 4
  164.             .MoveStart 1, 5
  165.             .Font.Spacing = -0.4
  166.         End With
  167.     End If
  168. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-8-23 08:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主上传个附件例子吧,不是很清楚表达的意思

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-23 09:08 | 显示全部楼层
楼上朋友,谢谢关注!不清楚附件宏有什么用途,说明平时不进行公文排版吧?经常进行公文排版的朋友,会需要此宏的。附件我就不上了。再次感谢关注!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-23 09:59 | 显示全部楼层
谢谢楼上朋友关注!不懂什么意思,说明平时未公文排版过吧!等你哪天需要公文排版了,就明白了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-31 20:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-1 09:32 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-6 23:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢 praijna 朋友!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-14 00:49 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-17 11:41 | 显示全部楼层
老师的公文排版附件格式似乎不对,附件距正文一个空行,多附件附件号对齐,附件名第二行对齐齐线墨点。
25415.jpg
888888.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-17 19:38 | 显示全部楼层
ldl--- 朋友,你更新了本帖的最新代码了吗?请再试试,或提供附件,谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 17:18 , Processed in 0.044111 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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