ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 电子印章(宏)最终体验版 v5.24

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-7-29 11:03 | 显示全部楼层
做得这个地步已经很好了!赞一个。感觉一般在“业务专用章”底下的文字留空白,就是首尾文字之间留空,不知道能否做出来,就更完美。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-29 12:12 | 显示全部楼层
谢谢楼上朋友关注!一我没明白你的意思,二是本着简单、实用的原则,本宏决定定稿了,将收录在下一版本通用模板中,学有余力的朋友们可以自行探索。

TA的精华主题

TA的得分主题

发表于 2015-7-29 12:21 | 显示全部楼层
413191246se 发表于 2015-7-29 12:12
谢谢楼上朋友关注!一我没明白你的意思,二是本着简单、实用的原则,本宏决定定稿了,将收录在下一版本通用 ...

v5已经完美,保留开口。字号好像调整不了,做出来的字有点小

TA的精华主题

TA的得分主题

发表于 2015-7-29 12:28 | 显示全部楼层
谢谢413191246se兄的分享,期待更智能化、通用……

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-30 11:07 | 显示全部楼层
本帖最后由 413191246se 于 2015-7-30 11:19 编辑

谢谢 tangqingfu 兄关注!确实水平很低,需要大家批评指正,一直努力编程中……

谢谢 wkxxxr 朋友关注!——不大会用窗体,更不会用进度条和调节按钮来做出美观实用专业的窗体来,本着简单实用的原则用宏将就对付。以12字为例,可以将代码中:Case 12: s = 1: t = 2: r = 260 这一行的 t=2 变成 1.7 或 1.5 来试试,t=艺术字稀疏值,越小字越大(不过个人认为,电子印章毕竟是电子的,不必和真实的印章相符,美观、相像就可以了)。


TA的精华主题

TA的得分主题

发表于 2015-7-31 13:04 | 显示全部楼层
对楼主的研究精神由衷地赞佩
对楼主的这份代码产生了兴趣,有空再站在楼主的肩膀上继续修改

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-31 14:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢楼上夸奖!很乐意看到大家钻研实用 VBA 宏来造福大家,方便工作。我编程的代码,与 守柔版主、sylun 朋友这些高手是无法比拟的,但作为 VBA 小菜鸟,能发一份光就发一份光,所以我赞赏自由传播、免费共享代码精神。(此宏要是用窗体来做,参数不少,目前各个控件我不大会,以前看 VB5/6 的书籍时会一点点。)

TA的精华主题

TA的得分主题

发表于 2015-8-1 13:03 | 显示全部楼层
本帖最后由 loquat 于 2015-8-1 20:15 编辑

感谢楼主为我们提供了这么好的代码
直接在楼主的代码基础上做了修改
1.最大程度减少对象读写操作,提高效率
2.执行代码时关系屏幕刷新,提高效率
3.部分地方采用了比较通用的写法
下一步的更新方向应该是将各个形状的大小尺寸做成参数,让用户自定义大小。
  1. Sub 电子印章_v5.1_loquat()
  2.     Application.ScreenUpdating = False
  3.     Dim i As String, s As Single, t As Single, r As Single, aLength&
  4.     Dim arr(1 To 4) As String
  5.     i = InputBox("请输入印章正文!(有效汉字位数:3-30)", "电子印章", "辽宁省朝阳市通用模板公司")
  6.     If i = "" Then Exit Sub
  7.     aLength = Len(i)
  8.     'Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter  '不必要的格式处理,可以删掉
  9.     Application.Options.AutoCreateNewDrawings = False
  10.     If Len(i) = 30 Then   '使用If语句替代Select语句,理论上效率会高一点点
  11.         s = 0.4: t = 0.8: r = 269.9  '根据经验设定Tracing, ScaleWidth, Adjustments的值
  12.     ElseIf aLength = 29 Then s = 0.41: t = 0.85: r = 269.9
  13.     ElseIf aLength = 28 Then s = 0.43: t = 0.9: r = 269.5
  14.     ElseIf aLength = 27 Then s = 0.45: t = 1: r = 269.5
  15.     ElseIf aLength = 26 Then s = 0.46: t = 1: r = 269.5
  16.     ElseIf aLength = 25 Then s = 0.48: t = 1: r = 269.5
  17.     ElseIf aLength = 24 Then s = 0.5: t = 1.1: r = 269
  18.     ElseIf aLength = 23 Then s = 0.52: t = 1.1: r = 269
  19.     ElseIf aLength = 22 Then s = 0.55: t = 1.1: r = 269
  20.     ElseIf aLength = 21 Then s = 0.57: t = 1: r = 269
  21.     ElseIf aLength = 20 Then s = 0.6: t = 1.1: r = 269
  22.     ElseIf aLength = 19 Then s = 0.63: t = 1.2: r = 268
  23.     ElseIf aLength = 18 Then s = 0.67: t = 1.3: r = 267
  24.     ElseIf aLength = 17 Then s = 0.7: t = 1.4: r = 266.5
  25.     ElseIf aLength = 16 Then s = 0.75: t = 1.5: r = 265.5
  26.     ElseIf aLength = 15 Then s = 0.8: t = 1.6: r = 264.5
  27.     ElseIf aLength = 14 Then s = 0.86: t = 1.7: r = 264
  28.     ElseIf aLength = 13 Then s = 0.92: t = 1.8: r = 262
  29.     ElseIf aLength = 12 Then s = 1: t = 2: r = 260
  30.     ElseIf aLength = 11 Then s = 1.08: t = 2.3: r = 258.5
  31.     ElseIf aLength = 10 Then s = 1.19: t = 2.5: r = 257
  32.     ElseIf aLength = 9 Then s = 1.33: t = 2.8: r = 255
  33.     ElseIf aLength = 8 Then s = 1.48: t = 3.1: r = 252
  34.     ElseIf aLength = 7 Then s = 1.7: t = 3.5: r = 251
  35.     ElseIf aLength = 6 Then s = 1.98: t = 3.9: r = 247
  36.     ElseIf aLength = 5 Then s = 2.4: t = 4.9: r = 243
  37.     ElseIf aLength = 4 Then s = 3: t = 5: r = 235
  38.     ElseIf aLength = 3 Then s = 3.9: t = 5: r = 220
  39.     Else
  40.         MsgBox "印章有效汉字位数:3-30!", vbOKOnly + vbCritical, "电子印章"
  41.     End If
  42.     With ActiveDocument
  43.         With .Shapes.AddTextEffect(msoTextEffect3, i, "宋体", 12!, msoFalse, msoFalse, 219.75, 103!)  '去掉Select语句和Selection语句,大幅提高效率
  44.             '艺术字(s=宽度缩放,t=稀疏,r=满圆)
  45.             .TextEffect.Tracking = t
  46.             .ScaleHeight 12, msoFalse, msoScaleFromTopLeft
  47.             .ScaleWidth s, msoFalse, msoScaleFromTopLeft
  48.             .Fill.ForeColor.RGB = RGB(255, 0, 0)
  49.             .Line.Weight = 0.25 '清晰
  50.             .Line.ForeColor.RGB = RGB(255, 0, 0)
  51.             .Adjustments(1) = r
  52.             arr(1) = .Name
  53.         End With
  54.         With .Shapes.AddShape(msoShapeOval, 201.6!, 85!, 180!, 180!) '圆周
  55.             .Fill.ForeColor.RGB = RGB(255, 255, 255)
  56.             .Fill.Transparency = 1!
  57.             .Line.Weight = 3.5
  58.             .Line.Style = msoLineThickThin
  59.             .Line.ForeColor.RGB = RGB(255, 0, 0)
  60.             arr(2) = .Name
  61.         End With
  62.         With .Shapes.AddShape(msoShape5pointStar, 264.3, 147.8, 54.9, 47.6) '五角星
  63.             .Fill.ForeColor.RGB = RGB(255, 0, 0)
  64.             .Line.Weight = 0.25
  65.             .Line.ForeColor.RGB = RGB(255, 0, 0)
  66.             arr(3) = .Name
  67.         End With
  68.         With .Shapes.AddShape(msoShapeRectangle, 259!, 197!, 66!, 24!)  '附言
  69.             arr(4) = .Name
  70.             .Line.Visible = msoFalse
  71.             .LockAspectRatio = msoTrue
  72.             With .TextFrame
  73.                 .MarginLeft = 0
  74.                 .MarginRight = 0
  75.                 .MarginTop = 0
  76.                 .MarginBottom = 0
  77.                 With .TextRange
  78.                     .Text = "业务专用章"
  79.                     .ParagraphFormat.Alignment = wdAlignParagraphCenter
  80.                     .Font.Color = wdColorRed
  81.                     .Font.Bold = True
  82.                     .Font.Size = 7.5
  83.                 End With
  84.             End With
  85.         End With
  86.         With .Shapes.Range(Array(arr(1), arr(2), arr(3), arr(4))).Group    '这里应该使用通用写法,否则代码将只能在新建文档中执行,且只能执行一次
  87.             .LockAspectRatio = msoTrue  '组合
  88.             .ScaleWidth 0.5, msoFalse, msoScaleFromTopLeft '缩放
  89.             .ScaleHeight 0.5, msoFalse, msoScaleFromTopLeft
  90.         End With
  91.     End With
  92.     Application.ScreenUpdating = True
  93. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2015-8-1 13:04 | 显示全部楼层
相关参数都是Single格式,写成Double(#)对效率会有一定的影响

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-2 19:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
顶之以更新!(代码中屏幕刷新我屏蔽了,不太懂这个,懂的朋友请自行打开。)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 02:34 , Processed in 0.036242 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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