ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 彩色标签(宏)2019-8-3 更新!

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-6 03:14 | 显示全部楼层
* 最近两天,三易其稿,本着模块化编程、分层推进思想,重写了自动排版宏,首次使用了模块级变量。
* 老师,如果有时间、兴趣,请指点一下《公文》宏和《普通》宏的具体编程思路、方法、算法、语句写法等,提速、优化、标准是我盼望的;如无兴趣并不强求,老师的身体健康是最重要的,编程也只是我的业余爱好。

TA的精华主题

TA的得分主题

发表于 2019-8-6 15:46 | 显示全部楼层
有跑偏的现象,也不知道怎么能够解决?

跑偏

跑偏

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-6 20:51 | 显示全部楼层
楼上朋友,你好! 请问,你用的 Word 是什么版本?我在 Word2003 和 Word2007 上运行是没有问题的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-7 13:54 | 显示全部楼层
本帖最后由 413191246se 于 2019-8-8 12:38 编辑

略。。。。

TA的精华主题

TA的得分主题

发表于 2019-8-8 21:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2019-8-6 03:14
* 最近两天,三易其稿,本着模块化编程、分层推进思想,重写了自动排版宏,首次使用了模块级变量。
* 老师 ...

作为练手并支持,按照37楼上传文档的思路写了部分代码,请楼主测试效果。很久没写百行的代码了。
至于公文,建议用模板,事前防范,一目了然。因后面才自动编辑排版,难免有疏忽,如因此发出有病公文可不好办。 生成档案标签邮件合并主文档.rar (1.67 KB, 下载次数: 28)


TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-9 01:57 | 显示全部楼层
* 不好意思!老师 请重新打包一下,上传一下。因为我下载后无法打开,提示损坏。
* 最近几天,我也几易其稿,昨天早上(8月8号)终于定稿,决定公文不变,普通样式,标题2345与正文字号保持一致,这样比较整齐划一,比较美观大方(因标题和正文字号大小不一,产生了尴尬的版面。如 5号字正文与三号字标题2)。
* 还有一个问题:刚才我反复测试《落款》宏(Selection对象)和《落款Update》宏(ActiveDocument对象),总是各有千秋,不知道怎么科学地测试谁更快一些。
* 老师,我最新作品是:8月8号的自动排版宏,如果有空闲和兴趣,请老师再指点一二。主要是《公文》宏和《普通》宏,别的未更新。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-9 01:59 | 显示全部楼层
* 老师,忘了说了,别人的文档,我给排成公文,我并不拟稿,怎么用模板?
* 谢谢 老师!辛苦了!请注意休息。。。

TA的精华主题

TA的得分主题

发表于 2019-8-9 20:39 | 显示全部楼层
413191246se 发表于 2019-8-9 01:57
* 不好意思!老师 请重新打包一下,上传一下。因为我下载后无法打开,提示损坏。
* 最近几天,我也几易其 ...

刚才尝试下载并解压,能正常打开文本文件。干脆直接将代码发出,只是长了一点,不好看。现在连文本文档都要压缩上传。
至于楼主的两个宏,因代码有几千行,过程很多,注释很少,有用wd常量名也有用常量值,易读性不强。不知楼主是基于什么原因写那么多过程,用于对OCR识别文档的整理吗?如果是对普通拟文稿排版,不应有这么复杂吧?
没找到落款Update宏。我很少用selection对象,通常用range,因selection对象是一个全局性的,虽然方便灵活,但也可有其不确定性,一不小心会出错。另外,selection对象总在当前页面活动窗格,其变动会带动页面滚动,即使关闭刷新也会给人一种慢的感觉。
  1. Sub Main()
  2.     '生成档案标签邮件合并主文档并执行合并
  3.     Dim oDoc As Document
  4.    
  5.     On Error GoTo hd
  6.     Application.ScreenUpdating = False
  7.     Set oDoc = Documents.Add
  8.     myPageSetup oDoc
  9.     TablesAdding oDoc
  10.     oDoc.Content.InsertParagraphAfter
  11.     Mailmerging oDoc
  12.     Application.ScreenUpdating = True
  13.     Exit Sub
  14. hd:
  15.     MsgBox "程序运行出现异常,退出!", vbCritical
  16. End Sub

  17. Sub myPageSetup(myDoc As Document)
  18.     '主文档页面设置
  19.     With myDoc.PageSetup
  20.         .PaperSize = wdPaperA4
  21.         .Orientation = wdOrientLandscape
  22.         .TopMargin = CentimetersToPoints(0.5)
  23.         .BottomMargin = CentimetersToPoints(0.5)
  24.         .LeftMargin = CentimetersToPoints(0.5)
  25.         .RightMargin = CentimetersToPoints(0.5)
  26.     End With
  27. End Sub

  28. Sub TablesAdding(myDoc As Document)
  29.     '在新文档插入嵌套表格,设置首个标签的框线,并以此为标准套用
  30.     Dim oTable As Table
  31.     Dim aTable As Table
  32.     Dim aCell As Cell
  33.     Dim i As Integer
  34.    
  35.     Options.DefaultBorderLineWidth = wdLineWidth150pt
  36.     Options.DefaultBorderLineStyle = wdLineStyleSingle
  37.     Set oTable = myDoc.Tables.Add(myDoc.Content, 1, 10, wdWord8TableBehavior)
  38.     With oTable
  39.         For Each aCell In .Range.Cells
  40.             With aCell.Range
  41.                 .Collapse wdCollapseStart
  42.                 If i = 0 Then
  43.                     Set aTable = aCell.Tables.Add(.Duplicate, 7, 1)
  44.                     With aTable
  45.                         With .Borders
  46.                             .InsideLineStyle = Options.DefaultBorderLineStyle
  47.                             .InsideLineWidth = Options.DefaultBorderLineWidth
  48.                             .OutsideLineStyle = wdLineStyleThinThickThinSmallGap
  49.                             .OutsideLineWidth = wdLineWidth450pt
  50.                             .OutsideColorIndex = wdGreen
  51.                         End With
  52.                         .Range.Cells(2).Borders(wdBorderTop).Visible = False
  53.                         .Range.Cells(5).Borders(wdBorderTop).Visible = False
  54.                         SetCellHeightAndText i, myDoc, aCell.Tables(1)
  55.                     End With
  56.                 Else
  57.                     .FormattedText = aTable.Range.FormattedText '主文档后续标签套用首个标签样式
  58.                     With .Tables(1).Range.Cells(1).Range
  59.                         .Collapse wdCollapseStart
  60.                          myDoc.MailMerge.Fields.AddNext .Duplicate
  61.                     End With
  62.                 End If
  63.             End With
  64.             i = i + 1
  65.         Next
  66.     End With
  67. End Sub

  68. Sub SetCellHeightAndText(n As Integer, myDoc As Document, myTable As Table)
  69.     '设置单个标签内容及格式
  70.     Dim i As Integer
  71.     Dim nCell As Cell
  72.     Dim cellheight() As Variant
  73.     Dim fieldnames() As Variant
  74.     Dim fontsizes() As Variant
  75.     Dim textwidths() As Variant
  76.     Dim myField As MailMergeField
  77.    
  78.     cellheight = Array(1.2, 1.2, 1.8, 1.8, 9, 1.8, 1.8)  '标签中各单元格的高度
  79.     textwidths = Array(2, 2, 2.2, 1.2, 8.2, 2.2, 2.2)  '标签各项内容的宽度
  80.     fontsizes = Array(18, 18, 22, 22, 26, 22, 22)  '标签各项内容的字符磅值
  81.     fieldnames = Array("", "单位名称", "档案名称", "编号", "案卷名称", "类别", "年度")
  82.    
  83.     myTable.Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter
  84.     myTable.Rows.Alignment = wdAlignRowCenter
  85.     myTable.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
  86.    
  87.     For Each nCell In myTable.Range.Cells
  88.         nCell.HeightRule = wdRowHeightExactly
  89.         nCell.Height = CentimetersToPoints(cellheight(i))
  90.         nCell.Range.Font.Size = fontsizes(i)
  91.         If i > 0 Then
  92.             myDoc.MailMerge.Fields.Add nCell.Range, fieldnames(i)
  93.             nCell.Range.FitTextWidth = CentimetersToPoints(textwidths(i))
  94.             With nCell.Range.Font
  95.                 If i < 3 Then
  96.                     .NameFarEast = "宋体"
  97.                     .Color = wdColorRed
  98.                 ElseIf i = 4 Then
  99.                     .NameFarEast = "方正小标宋简体"
  100.                     nCell.Range.Orientation = wdTextOrientationVerticalFarEast
  101.                 Else
  102.                     .NameFarEast = "楷体_GB2312"
  103.                 End If
  104.             End With
  105.         End If
  106.         i = i + 1
  107.     Next
  108. End Sub

  109. Sub Mailmerging(myDoc As Document)
  110.     '设置并执行邮件合并
  111.     With myDoc.MailMerge
  112.         .MainDocumentType = wdDirectory
  113.         .Destination = wdSendToNewDocument
  114.         .SuppressBlankLines = False
  115.         .DataSource.FirstRecord = wdDefaultFirstRecord
  116.         .DataSource.LastRecord = wdDefaultLastRecord
  117.         If Dialogs(81).Show = -1 Then .Execute True '如手动打开数据源则执行合并
  118.     End With
  119. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-10 02:29 | 显示全部楼层
* 我这儿下载后,有时正常,有时提示损坏。也有可能是我电脑上有木马病毒或 RAR 版本跟不上了。
*《公文》宏和《普通》宏,仅仅是对正常公文/普通文档进行排版处理,有些地方也不符合公文要求。
* Selection/Range 这两个对象,我现在明白,前者激活对象,后者不激活对象,光标不动,速度较快。
* 最近几天,针对模块化编程,反反复复,几易其稿,也许在家里电脑较慢,排版速度感觉不快,但有时又想,也没必要太快,现在也不算慢了。又针对《落款》宏进行了增强,多一些代码,增加一些舒适吧。
* 谢谢 老师!辛苦了!再次请多多注意身体。。。(老师的代码,我要研究一番。。。)

TA的精华主题

TA的得分主题

发表于 2019-10-15 20:24 | 显示全部楼层
这个宏生成的是A4横向,目前多数档案是A4竖立摆放的,所以生成的标签应该要纵向才对,如果改一下就好了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 14:20 , Processed in 0.041880 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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