ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-8-10 14:37 | 显示全部楼层
本帖最后由 loquat 于 2015-8-10 14:38 编辑
  1.     If j = 5 Then: s = 2.4: t = 4.9: r = 243
  2.     ElseIf j = 6 Then s = 1.98: t = 3.9: r = 247
  3.     ElseIf j = 7 Then s = 1.7: t = 3.5: r = 251
  4.     ElseIf j = 8 Then s = 1.48: t = 3.1: r = 252
  5.     ElseIf j = 9 Then s = 1.33: t = 2.8: r = 255
  6.     ElseIf j = 10 Then s = 1.19: t = 2.5: r = 257
  7.     ElseIf j = 11 Then s = 1.08: t = 2.3: r = 258.5
  8.     ElseIf j = 12 Then s = 1: t = 2: r = 260.5
  9.     ElseIf j = 13 Then s = 0.92: t = 1.8: r = 262
  10.     ElseIf j = 14 Then s = 0.86: t = 1.7: r = 264
  11.     ElseIf j = 15 Then s = 0.8: t = 1.6: r = 264.5
  12.     ElseIf j = 16 Then s = 0.75: t = 1.5: r = 265.5
  13.     ElseIf j = 17 Then s = 0.7: t = 1.4: r = 266.5
  14.     ElseIf j = 18 Then s = 0.67: t = 1.3: r = 267
  15.     ElseIf j = 19 Then s = 0.63: t = 1.32: r = 268
  16.     ElseIf j = 20 Then s = 0.6: t = 1.27: r = 269
  17.     ElseIf j = 21 Then s = 0.57: t = 1.2: r = 269
  18.     ElseIf j = 22 Then s = 0.55: t = 1.1: r = 269
  19.     ElseIf j = 23 Then s = 0.52: t = 1.1: r = 269
  20.     ElseIf j = 24 Then s = 0.5: t = 1.05: r = 269
  21.     ElseIf j = 25 Then s = 0.48: t = 1: r = 269.5
  22.     ElseIf j = 26 Then s = 0.46: t = 0.97: r = 269.5
  23.     ElseIf j = 27 Then s = 0.45: t = 0.93: r = 269.5
  24.     ElseIf j = 28 Then s = 0.43: t = 0.88: r = 269.5
  25.     ElseIf j = 29 Then s = 0.41: t = 0.85: r = 269.9
  26.     ElseIf j = 30 Then s = 0.4: t = 0.8: r = 269.9
  27.     ElseIf j = 4 Then s = 3: t = 5: r = 235
  28.     ElseIf j = 3 Then s = 3.9: t = 5: r = 220
  29.     End If
复制代码

可以再简化成这样
  1. s = Array(2.4, 1.98, 1.7, 1.48, 1.33, 1.19, 1.08, 1, 0.92, 0.86, 0.8, 0.75, 0.7, 0.67, 0.63, 0.6, 0.57, 0.55, 0.52, 0.5, 0.48, 0.46, 0.45, 0.43, 0.41, 0.4, 3, 3.9)
  2. t = Array(4.9, 3.9, 3.5, 3.1, 2.8, 2.5, 2.3, 2, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3, 1.32, 1.27, 1.2, 1.1, 1.1, 1.05, 1, 0.97, 0.93, 0.88, 0.85, 0.8, 5, 5)
  3. r = Array(243, 247, 251, 252, 255, 257, 258.5, 260.5, 262, 264, 264.5, 265.5, 266.5, 267, 268, 269, 269, 269, 269, 269, 269.5, 269.5, 269.5, 269.5, 269.9, 269.9, 235, 220)
  4. j = len(i)
  5. '调用时:若Option Base 0,则调用s(j-5)
  6. '             若Option Base 1,则调用s(j-4)
  7. '可以节省大量篇幅,但是效率估计有所降低,其实也可以使用三维数组arr(1 to 3, 1 to 26) as single  '这里使用double没有意义,且影响效率
复制代码

TA的精华主题

TA的得分主题

发表于 2015-8-10 14:52 | 显示全部楼层

之前未测试,现在修改发上来。。。

本帖最后由 loquat 于 2015-8-11 23:16 编辑

修正错误
  1. Sub 电子印章_v5_23()
  2. '(c) by 413191246se
  3. '(e) by loquat
  4.     Application.ScreenUpdating = False
  5.     If Documents.count = 0 Then Documents.Add
  6.     Dim i$, s, t, r, arr(1 To 4) As String, x!, f$, a$
  7. InputMark:
  8.     i = InputBox("请注意! 印章正文(3-30字)和 附言(2-6字)可以一起输入,但必须以中文逗号,分隔!", "电子印章", "辽宁省朝阳市通用模板公司,业务专用章")
  9.     If i = "" Then Exit Sub
  10.     a = InStrRev(i, ",")
  11.     If a Then f = Mid(i, a + 1): i = Left(i, a - 1) Else f = "财务专用章"
  12.     If Len(i) < 3 Or Len(i) > 30 Or Len(f) < 2 Or Len(f) > 6 Then GoTo InputMark
  13.     If Len(f) = 5 Then
  14.         x = 258.4!
  15.     ElseIf Len(f) = 4 Then x = 264.5!
  16.     ElseIf Len(f) = 3 Then x = 263.5!: f = Left(f, 1) & " " & Mid(f, 2, 1) & " " & Right(f, 1)
  17.     ElseIf Len(f) = 2 Then x = 270.5!: f = Left(f, 1) & "  " & Right(f, 1)
  18.     ElseIf Len(f) = 6 Then x = 251.5!
  19.     End If
  20.     s = Array(2.4!, 1.98!, 1.7!, 1.48!, 1.33!, 1.19!, 1.08!, 1!, 0.92!, 0.86!, 0.8!, 0.75!, 0.7!, 0.67!, 0.63!, 0.6!, 0.57!, 0.55!, 0.52!, 0.5!, 0.48!, 0.46!, 0.45!, 0.43!, 0.41!, 0.4!, 3!, 3.9!)
  21.     t = Array(4.9!, 3.9!, 3.5!, 3.1!, 2.8!, 2.5!, 2.3!, 2!, 1.8!, 1.7!, 1.6!, 1.5!, 1.4!, 1.3!, 1.32!, 1.27!, 1.2!, 1.1!, 1.1!, 1.05!, 1!, 0.97!, 0.93!, 0.88!, 0.85!, 0.8!, 5!, 5!)
  22.     r = Array(243!, 247!, 251!, 252!, 255!, 257!, 258.5!, 260.5!, 262!, 264!, 264.5!, 265.5!, 266.5!, 267!, 268!, 269!, 269!, 269!, 269!, 269!, 269.5!, 269.5!, 269.5!, 269.5!, 269.9!, 269.9!, 235!, 220!)
  23.     With ActiveDocument.Shapes
  24.         With .AddTextEffect(msoTextEffect3, i, "宋体", 12!, msoFalse, msoFalse, 219.75!, 103!) '艺术字
  25.             .TextEffect.Tracking = t(Len(i) - 5)
  26.             .ScaleHeight 12, msoFalse, msoScaleFromTopLeft
  27.             .ScaleWidth s(Len(i) - 5), msoFalse, msoScaleFromTopLeft
  28.             .Adjustments(1) = r(Len(i) - 5)
  29.             arr(1) = .Name
  30.         End With
  31.         With .AddShape(msoShapeOval, 201.6!, 85!, 180!, 180!) '圆周
  32.             .Fill.Transparency = 1!
  33.             .Line.Style = msoLineThickThin
  34.             arr(2) = .Name
  35.         End With
  36.         arr(3) = .AddShape(msoShape5pointStar, 264!, 147.8!, 54.9!, 47.6).Name '五角星
  37.         With .AddTextEffect(msoTextEffect3, f, "宋体", 13!, msoTrue, msoFalse, x, 206!) '附言
  38.             .TextEffect.PresetShape = msoTextEffectShapePlainText
  39.             .Fill.Visible = msoTrue
  40.             arr(4) = .Name
  41.         End With
  42.         With .Range(Array(arr(1), arr(2), arr(3), arr(4))).Group '组合
  43.             .Fill.ForeColor.RGB = RGB(255, 0, 0)
  44.             .Line.ForeColor.RGB = RGB(255, 0, 0)
  45.             .Line.Weight = 0.25!
  46.             .GroupItems(2).Line.Weight = 3.5
  47.             .LockAspectRatio = msoTrue
  48.             .ScaleWidth 0.6, msoFalse, msoScaleFromTopLeft
  49.             .ScaleHeight 0.6, msoFalse, msoScaleFromTopLeft
  50.             .IncrementTop 92.6!
  51.             .IncrementLeft 119.4!
  52.             .Select
  53.         End With
  54.     End With
  55.     Application.ScreenUpdating = True
  56. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-10 21:04 | 显示全部楼层
本帖最后由 413191246se 于 2015-8-10 21:07 编辑

谢谢 loquat !数组/函数我是真的一点也不懂!连 InStr 函数都不会用,还是跟你学的呢!最近两天一直忙徒弟 139 的问题,重新改写了两个功能,也是煞费苦心,没办法,水平太低,但求人也不易,还是得自己想办法。(其实我做我的通用模板,也不必用窗体,只是处理段落和文字,好办不少,但 139 的问题只好用窗体/控件了,我又不熟,查各个控件的使用方法费了不少时间,但界面还是得依靠核心代码来支撑。)

TA的精华主题

TA的得分主题

发表于 2015-8-11 12:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
@413191246se
兄过谦了,我也只是入门新手。并且现在也没太多时间研究VBA了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-11 12:14 | 显示全部楼层
——loquat: 刚才我测试了一下,发现错误百出,是数组的问题,还得劳你费心一下,测试 OK 再放上来,数组/函数我是一点也不懂,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-12 15:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
顶以更新!!!

TA的精华主题

TA的得分主题

发表于 2015-8-12 15:25 | 显示全部楼层
谢谢413191246se兄和loquat兄,能否加入调节开头大小的inputbox,给个默认值,(提醒)用户根据需求输入数值(开口大小)?

TA的精华主题

TA的得分主题

发表于 2015-8-12 20:48 | 显示全部楼层
报告楼主,4句 .Line.Weight还可以简写为2句。
可以参考楼上代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-12 22:08 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-14 07:36 | 显示全部楼层
loquat:
    请问:数组中 s = Array(2.4!, 1.98!, 1.7! 里面的"!"英文感叹号,表示数据类型为 Single,但我看网上介绍数组函数 Array 的例子中,都不加"!"感叹号啊!加了增加了字节数,不符合节约原则,加/不加有什么区别吗?(你的回复由于未在最末帖子,所以,11号那天我没看到你的回复。后来我反复查找网上数组帮助,完成了与你类似的一维数组的写法。)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-29 03:59 , Processed in 0.036776 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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