新人初学,word宏 修改字体用,一次大概10w个字左右,运行最快都要10分钟,最慢就直接卡死,请大佬不吝赐教

qq_37179700 2021-03-15 12:33:53
Sub 随机模仿手写()

Dim Ra As Range
Dim FontSize() As String
FontSize = Split("16.5,16.5,17,18", ",")
Dim FontName() As String
FontName = Split("A1,A2,A3,A4,A5", ",")
a = 0
'a值调整字体上下的偏差
b = 1
'b值调整字间距
'c = 20
'c值调整行间距
For Each Ra In ActiveDocument.Characters
VBA.Randomize
FontNameLength = UBound(FontName) - LBound(FontName)
FontSizeLength = UBound(FontSize) - LBound(FontSize)
Ra.Font.Name = FontName(Int(VBA.Rnd * FontNameLength) + 1)
Ra.Font.Size = FontSize(Int(VBA.Rnd * FontSizeLength) + 1)
Ra.Font.Position = Choose(Int(VBA.Rnd * 0.5) + 1, -1, -0.5, 0, 0.5, 1) + a
Ra.Font.Spacing = Choose(Int(VBA.Rnd * 1) + 1, -1.5, -1, -0.5, 0, 0.5, 1, 2) + b
If Ra = "。" Or Ra = "," Or Ra = ";" Or Ra = "’" Or Ra = "‘" Or Ra = "“" Or Ra = "”" Or Ra = "!" Or Ra = ":" Then
'Ra.Font.Name = "A1"
Ra.Font.Size = "14"
Ra.Font.Position = "-0.5"
Ra.Font.Spacing = "-1"
'ElseIf Asc(Ra) >= 48 And Asc(Ra) <= 57 Then
' Ra.Font.Name = "J2,J3,J4"
ElseIf Asc(Ra) >= 97 And Asc(Ra) <= 122 Or Asc(Ra) >= 65 And Asc(Ra) <= 90 Or Ra = " . " Or Ra = "(" Or Ra = ")" Or Ra = "(" Or Ra = ")" Or Ra = "~" Then
'Ra.Font.Name = "J1,J2,J3,J4,J5,A1,A2,A3"
End If
If Ra = "." Or Ra = "状" Then
Ra.Font.Name = "A3"
Ra.Font.Size = "16.5"
Ra.Font.Position = "0"
Ra.Font.Spacing = "0"
End If
If Ra = "," Or Ra = "、" Then
Ra.Font.Name = "A3"
Ra.Font.Size = "16.5"
Ra.Font.Position = "0"
Ra.Font.Spacing = "-5"
End If
If Ra = "0" Or Ra = "、" Then
Ra.Font.Size = "11"
Ra.Font.Position = "0"
Ra.Font.Spacing = "0"
End If
If Ra = "顶" Then
Ra.Font.Name = "W3"
Ra.Font.Size = "16.5"
Ra.Font.Position = "0"
Ra.Font.Spacing = "0"
End If
Next

'For Each Ra In ActiveDocument.Paragraphs

' Ra.ParagraphStyle.LineSpacingRule = wdLineSpaceExactly
' Ra.ParagraphStyle.LineSpacing = Int(VBA.Rnd * 1) + 1 + c
' Next


'With Selection.ParagraphFormat
' .FirstLineIndent = CentimetersToPoints(0.35)
' .CharacterUnitFirstLineIndent = 0
' End With

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "“"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchWholeWord = False
.MatchByte = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute2007 Replace:=ReplaceAll
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "”"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Application.ScreenUpdating = False
End Sub



...全文
462 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
脆皮大雪糕 2021-03-19
  • 打赏
  • 举报
回复
太长,随便看一眼,一个字一个字的调格式,咋想的。 下面又有针对某些特殊字符的处理。 你要知道十万个字里面需要特殊处理的字能占1%么?为了这1%把所有撸一遍卡死你!! 正常的,如果你不会VBA,手工操作咋操作?先全选,把全篇先设定好字号行间距,然后再去把特殊字符一个一个改对吧。程序一样,先全改格式,然后搜索固定字符,这个搜索虽然也是全撸,但是由于绝大部分字符仅仅做了一次字符串比较而没有做其他任何操作,效率会高很多。至于界面卡死问题,在循环体内加一句 doevents能改善
X-i-n 2021-03-19
  • 打赏
  • 举报
回复
每个字都遍历一次,不卡才稀奇,无解。
不懂别说哎 2021-03-17
  • 打赏
  • 举报
回复
如果算法不能优化的时候,只能在效率上优化了,你可以将多个IF的判断改成case这样可以节省一部分开销,另外在频繁使用一个对象的各种属性或方法的时候可以用WITH 来减少调用对象的次数
赵4老师 2021-03-15
  • 打赏
  • 举报
回复
加Debug.Print语句,可在立即窗口显示中间变量值。
适用人群Word初学者、办公文秘、写作者、各行各业与Word打交道的人课程概述特别说明:本课程隶属于“365天个人职场技能成长训练营”,如果已经购买该课程,则不必购买本课程,勿重复购买。课程目标通过全程实战案例快速掌握Word排版精髓,妙用样式、快捷键和通用模板实现一劳永逸适用人群Word初学者、办公文秘、写作者、各行各业与Word打交道的人课程简介本课程通过一个完整的实战案例,教你快速掌握使用Word进行文样式定制、快捷键指定、将样式与通用模板绑定的全套方法,让你在以后的工作中,只需要输入文后按快捷键就可以快速应用常用的样式,不必再每次输入后一一调整格式。特别适合经常跟Word长文档打交道的人,例如长篇论文、产品手册、各种书籍排版等,用这种方法可以让你提高不止10倍工作效率。东东老师是微软认证Office办公软件讲师,策划出版过多本相关书籍,具有10年以上Office办公软件使用与培训经验,同时也是使用Word进行长文档(书籍)排版的日常实践者,对于长文档排版中样式与模板的使用具有非常丰富的经验。希望这次分享的经验能够帮助到更多需要的人。如果在学习时有对Word其它方面技巧的需求,也在评论区留言,东东老师将根据留言设计更多实用的课程。祝您学习愉快!!!

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧