ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 文本的格式化和整理

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-4-11 20:48 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 weiyingde 于 2017-4-24 12:12 编辑

一、鸣谢:
       在本坛duquancai、jiminyanya、dafanshu1、loquat等多位大侠、朋友的启蒙、指教和帮助下,完成了本程序,没有他们的帮助,就没有这些代码。所以,本程序可以说是他们的原创,我只不过是,把他们的智慧综合一下。对他们帮助和指教表示衷心的感谢!!
二、申明:
(1)、由于初学word,基础不牢(可以说还未启蒙),代码免不了冗余啰嗦、不够条理,所以运行缓慢,不流畅等等毛病,希望这些朋友,继续援手,共同完善。
(2)、特别是结尾部分添加或修改整理日期,更是毛病百出。
(3)、特别希望大侠增加它更多的功能,优化提速代码,使之更有效率。
(4)、说是万能那是出发点和最终的目标,而并非眼前的实际功能。
三、本程序功能作用:
1、可做试卷的母版,隐藏或显示答案。
2、整理网上下载的带乱码的文档,删去多余的空格;
3、格式化文档:改变字体、颜色、并且做到加粗标题等。
     更多的功能,期待你的加入和添加。
Public 次数 As Integer
Sub 一键万能格式整理()
Dim pars As Paragraphs
次数 = 次数 + 1
k = 次数 Mod 2 + 1
Dim bl As Boolean
mStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Randomize
z1 = Int(Rnd * 3 + 1)
z2 = Int(Rnd * 4 + 1)
'On Error Resume Next
Application.ScreenUpdating = False '关闭屏幕刷新
Dim par As Paragraph

Set rg = ActiveDocument.Paragraphs(1).Range
sr = rg.Text
If Left(Right(sr, 2), 1) <> "。" Then
   rg.MoveEnd , -1
   rg.InsertAfter vbCr
   bl = False
Else
   bl = True
End If
If bl = False Then rg.Text = Left(sr, rg.Characters.Count - 1) & "。"

  With ActiveDocument.Content '以下处理空格(包括全角、半角)、断行、空行等
    .Font.ColorIndex = wdBlack
     With .Find
       .Execute "^l", , , 1, , , , , , "^p", 2
       .Execute "^13^32{1,}", , , 1, , , , , , "^p", 2
       .Execute "^t", , , 1, , , , , , "", 2
       .Execute "([一-隝]@)([ ]{1,})([一-隝]@)", , , 1, , , , , , "\1\3", 2
       .Execute "([一-隝]@)(^32{1,})([一-隝]@)", , , 1, , , , , , "\1\3", 2
       .Execute "([!。:……?!)])^13{1,}", , , 1, , , , , , "\1", 2
       .Execute "^s", , , , , , , , , "", 2
     End With
  End With

With ActiveDocument.Content '以下处理各种特殊格式
      With .Find '处理中文字体
        .Replacement.Font.NameFarEast = Choose(z2, "楷体", "华文楷体", "方正启体简体", "黑体")
        .Execute "([一-隝]@)", , , 1, , , , , , "^&", 2
      End With
      With .Find '处理西文字体
        .Replacement.Font.NameAscii = Choose(z2, "方正姚体", "Arial Black", "Arial Narrow", "Impact", "Franklin Gothic Medium Cond")
        .Execute "([A-Za-z]@)", , , 1, , , , , , "^&", 2
      End With
      With .Find '处理“一、二……十"这样的项目
        With .Replacement.Font
             .NameFarEast = "华文新魏"
             .ColorIndex = wdDarkBlue
             .Size = 18
        End With
             .Execute "([一二三四五六七八九十]@[、,]*^13)", , , 1, , , , , , "^&", 2
      End With
      With .Find '处理“(一)、(二)……(十)"这样的项目
             .Replacement.Font.NameFarEast = "方正康体简体"
             .Replacement.Font.ColorIndex = wdDarkBlue
             .Replacement.Font.Size = 15
             .Execute "([\((\[【][一二三四五六七八九十甲乙丙丁]@[\))\]】][、,]*^13)", , , 1, , , , , , "^&", 2
      End With
      With .Find '处理答案,包括(ABCD)形式的答案,再就是答:这种形式的答案。
       Do While .Execute("[\((\[【][A-D]@[\))\]】]", , , 1) '1, , , , , , "^&", 2
          With .Parent
               .Start = .Start + 1: .End = .End - 1
               .Font.Name = "Arial Black"
               .Font.ColorIndex = Choose(k, 8, 2)
               .Font.Size = 18
               .Collapse 0
          End With
       Loop
      End With
      With ActiveDocument.Content.Find
           .Replacement.Font.ColorIndex = Choose(k, 8, 2)
           .Replacement.Font.Underline = wdUnderlineWavy
           .Replacement.Font.UnderlineColor = wdColorDarkBlue
           .Execute "(^13答:*^13)", , , 1, , , , , , "\1", 2 '隐藏答案
      End With
      With ActiveDocument.Content.Find
           .Replacement.Font.ColorIndex = 1
           .Execute "答:", , , 1, , , , , , , 2, 2 '显示"答案"二字。
      End With
End With
  
     
   With ActiveDocument.Paragraphs(1) '处理第一段格式
       .Format.Alignment = wdAlignParagraphCenter
       With .Range.Font
            .Bold = True
            .ColorIndex = Choose(z1, wdDarkBlue, wdBlack, wdBlue, wdViolet)
            .NameFarEast = Choose(z1, "腾祥范笑歌楷书简", "华文隶书", "华文新魏")
       End With
   End With
   For i = 2 To ActiveDocument.Paragraphs.Count ' 处理其他各段行距,体体大小
        With ActiveDocument.Paragraphs(i)
               .LineSpacingRule = wdLineSpaceAtLeast
               .LineSpacing = 14
               .Format.CharacterUnitFirstLineIndent = 2
               .Range.Font.Size = 10.5
        End With
   Next
   
   Set rg = ActiveDocument.Paragraphs(1).Range '删除第一段(文章标题)的句号,恢复其本来内容
   sr = ActiveDocument.Paragraphs(1).Range.Text
   If Left(Right(sr, 2), 1) = "。" Then rg.MoveEnd , -1: rg.InsertAfter vbCr
   With ActiveDocument.Paragraphs(1)
       If Left(Right(sr, 2), 1) = "。" Then .Range = Left(sr, Len(sr) - 2)
       .Range.Font.Size = 22
   End With
     
   With ActiveDocument '在最后一段修改或添加整理日期。
       With .Content.Find
         If .Found = True Then
            .Execute "([0-9]{4}年[0-9]月{2}[0-9]{2}日)", , , 1, , , , , , "^&", 1
            .Replacement.Text = Format(Date, "yyyy年mm月dd日")
         Else
             With ActiveDocument.Paragraphs
                Set rng = ActiveDocument.Paragraphs(.Count).Range
                rng.MoveEnd , -1: rng.InsertAfter vbCr
                ActiveDocument.Paragraphs(.Count).Range = Format(Date, "yyyy年mm月dd日整理")
                ActiveDocument.Paragraphs(.Count).Format.Alignment = wdAlignParagraphRight
             End With
         End If
        End With
    End With
ActiveDocument.Content.ParagraphFormat.DisableLineHeightGrid = -1
Application.ScreenUpdating = True '开启屏幕刷新
End Sub

一键万能格式整理.rar

51.64 KB, 下载次数: 142

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-4-12 12:26 | 显示全部楼层
只有一点小建议
Dim aDoc As Document
Set aDoc = ActiveDocument
不要频繁直接调用ActiveDocument会不会效率高一点

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-12 13:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
loquat 发表于 2017-4-12 12:26
只有一点小建议
Dim aDoc As Document
Set aDoc = ActiveDocument

好的,再看看过程的安排顺序是否恰当,还有哪些需要添加的,多赐一些代码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-12 13:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
再加几行删除重复段落的代码:
.Execute "^13", , , 1, , , , , , "^p^p", 2 '
.Execute "(^13[!^13]@^13)\1", , , 1, , , , , , "\1", 2 '删除连续重复段落
.Execute "(^13[!^13]@^13)(*)\1", , , 1, , , , , , "^13\1\2", 2 '删除非连续重复段落
.Execute "[^11^13]{1,}", , , 1, , , , , , "^p", 2
但有个问题:
需要运行两次或以上,才能删完。
求大虾指教,这是为什么?

TA的精华主题

TA的得分主题

发表于 2017-4-14 08:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 13907933959 于 2017-4-15 06:26 编辑

前辈好!
感谢分享!佩服您的才华!能不能将每句代码用中文准确的注释一下,方便我这样的小白看懂学习?谢谢!

TA的精华主题

TA的得分主题

发表于 2017-4-14 20:58 | 显示全部楼层
楼主好!——洋洋洒洒,蔚为大观!我都看傻了,像这样复杂的替换,我实在不会,我都是在宏的基础上编辑一些基本代码,楼主水平比我高得多!佩服!(我看楼主不必请教我了,我得请教你!)
139 好!——最近未上线。给你挑个小错误,正确词是“分享xiang2”,不是“分亨heng1”。(大亨=大款,分享、共享。)这两天又想折腾一下公文格式。

TA的精华主题

TA的得分主题

发表于 2017-4-15 06:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 13907933959 于 2017-4-16 15:29 编辑
413191246se 发表于 2017-4-14 20:58
楼主好!——洋洋洒洒,蔚为大观!我都看傻了,像这样复杂的替换,我实在不会,我都是在宏的基础上编辑一些 ...

师傅好!
好久不见,真是想念!感谢师傅提醒,是错了,以修正。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-15 07:34 | 显示全部楼层
13907933959 发表于 2017-4-14 08:27
前辈好!
感谢分享!佩服您的才华!能不能将每句代码用中文准确的注释一下,方便我这样的小白看懂学习?谢 ...

1、建议你先看看这个帖子:
http://club.excelhome.net/thread-795024-1-1.html
2、word我和你都是新手,并非高手;
3、有时间,我写一下,但写的未必正确,只能算是自己的理解(想当然)。

TA的精华主题

TA的得分主题

发表于 2017-4-15 09:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
weiyingde 发表于 2017-4-15 07:34
1、建议你先看看这个帖子:
http://club.excelhome.net/thread-795024-1-1.html
2、word我和你都是新手 ...

前辈好!
好的、感谢推荐!这个我也曾下载看过,由于我现在还在跟师傅学中医,只能有一些零碎的时间学这个东西,往往今天学了一点,等中医方面的东西冲一下,再过一段时间又全部回到了原点,真是无奈!

TA的精华主题

TA的得分主题

发表于 2017-4-15 10:47 | 显示全部楼层
13907933959 发表于 2017-4-15 09:21
前辈好!
好的、感谢推荐!这个我也曾下载看过,由于我现在还在跟师傅学中医,只能有一些零碎的时间学这 ...

个人觉得,对你而言,中医比VBA有用,中医是谋生的手段。。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 00:39 , Processed in 0.042790 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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