一個簡單的宏實現(xiàn)一鍵排版(整理復(fù)盤)

[TOC]

宏和VBA的區(qū)別

  • 宏是一個或多個指令的集合,控制word執(zhí)行一連串的操作
  • VBA是高級語言挺身,通過面向?qū)ο蟮姆椒▉硗瓿珊瓴荒芡瓿傻墓ぷ鳌?/li>
  • VBA宏會被VB編輯器記錄為一個VBA過程

一鍵排版宏舉例

Sub typeset()
'
' typeset 宏
' Author : 李佳成
' Time : 2018.5.1
'
'
'   清除格式
    Selection.WholeStory
    Selection.ClearParagraphDirectFormatting
    On Error Resume Next
    
'   首行縮進
    
    With Selection.ParagraphFormat
 
        .LeftIndent = CentimetersToPoints(0)
 
        .RightIndent = CentimetersToPoints(0)
 
        .SpaceBefore = 0
 
        .SpaceBeforeAuto = False
 
        .SpaceAfter = 0
 
        .SpaceAfterAuto = False
 
        .LineSpacingRule = wdLineSpaceSingle
 
        .Alignment = wdAlignParagraphJustify
 
        .WidowControl = False
 
        .KeepWithNext = False
 
        .KeepTogether = False
 
        .PageBreakBefore = False
 
        .NoLineNumber = False
 
        .Hyphenation = True
 
        .FirstLineIndent = CentimetersToPoints(0)
 
        .OutlineLevel = wdOutlineLevelBodyText
 
        .CharacterUnitLeftIndent = 0
 
        .CharacterUnitRightIndent = 0
 
        .CharacterUnitFirstLineIndent = 2
 
        .LineUnitBefore = 0
 
        .LineUnitAfter = 0
 
        .MirrorIndents = False
 
        .TextboxTightWrap = wdTightNone
 
        .AutoAdjustRightIndent = True
 
        .DisableLineHeightGrid = False
 
        .FarEastLineBreakControl = True
 
        .WordWrap = True
 
        .HangingPunctuation = True
 
        .HalfWidthPunctuationOnTopOfLine = False
 
        .AddSpaceBetweenFarEastAndAlpha = True
 
        .AddSpaceBetweenFarEastAndDigit = True
 
        .BaseLineAlignment = wdBaselineAlignAuto
 
    End With
    
    
'   清除段落前后空格
    For a = 1 To ActiveDocument.Paragraphs.Count
    Set sutRng = ActiveDocument.Paragraphs(a).Range
    sutRng.MoveEnd wdCharacter, -1
    sutRng.Text = Trim(sutRng.Text)
    sutRng.MoveEnd wdCharacter, 1
    ActiveDocument.Paragraphs(a).Range.Text = sutRng.Text
    Next a
    
'   清除空行送丰,空格
    
    Dim i As Paragraph, n As Long
    Application.ScreenUpdating = False
    For Each i In ActiveDocument.Paragraphs
    If Len(i.Range) = 1 Then
    i.Range.Delete
    n = n + 1
    End If
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
    .Text = " "
    .Replacement.Text = ""
    .Wrap = wdFindContinue
    End With
    With Selection.Find
    .Text = "vbTab"
    .Replacement.Text = ""
    .Wrap = wdFindContinue
    End With
    With Selection.Find
    .Text = " "
    .Replacement.Text = ""
    .Wrap = wdFindContinue
    End With
    With Selection.Find
        .Text = "^t"
        .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
    Next
    Application.ScreenUpdating = True
    Options.AutoFormatAsYouTypeDeleteAutoSpaces = True
    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
    
    Selection.WholeStory
    With ActiveDocument.Styles(wdStyleNormal).Font
        If .NameFarEast = .NameAscii Then
            .NameAscii = ""
        End If
        .NameFarEast = ""
    End With
'   設(shè)置頁面
    With Selection.PageSetup
        .LineNumbering.Active = False
        .Orientation = wdOrientPortrait
        .TopMargin = CentimetersToPoints(2.54)
        .BottomMargin = CentimetersToPoints(1.4)
        .LeftMargin = CentimetersToPoints(2.2)
        .RightMargin = CentimetersToPoints(1.3)
        .Gutter = CentimetersToPoints(0)
        .HeaderDistance = CentimetersToPoints(1.3)
        .FooterDistance = CentimetersToPoints(2)
        .PageWidth = CentimetersToPoints(21)
        .PageHeight = CentimetersToPoints(29.7)
        .FirstPageTray = wdPrinterDefaultBin
        .OtherPagesTray = wdPrinterDefaultBin
        .SectionStart = wdSectionNewPage
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .VerticalAlignment = wdAlignVerticalTop
        .SuppressEndnotes = False
        .MirrorMargins = False
        .TwoPagesOnOne = False
        .BookFoldPrinting = False
        .BookFoldRevPrinting = False
        .BookFoldPrintingSheets = 1
        .GutterPos = wdGutterPosLeft
        .CharsLine = 39
        .LinesPage = 32
        .LayoutMode = wdLayoutModeGrid
    End With
    

        
'   設(shè)置段落
    If (ActiveDocument.Paragraphs.Count >= 1) Then
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    Selection.MoveLeft unit:=wdCharacter, Count:=1
    Selection.MoveDown unit:=wdParagraph, Count:=1, Extend:=wdExtend
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.Font.Name = "宋體"
    Selection.Font.Bold = wdToggle
    Selection.Font.Size = 22
    Selection.MoveRight unit:=wdCharacter, Count:=1
    End If
    
    If (ActiveDocument.Paragraphs.Count >= 2) Then
    Selection.MoveDown unit:=wdParagraph, Count:=1, Extend:=wdExtend
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.Font.Name = "宋體"
    Selection.Font.Bold = wdToggle
    Selection.Font.Size = 22
    Selection.MoveRight unit:=wdCharacter, Count:=1
    End If
    
    If (ActiveDocument.Paragraphs.Count >= 3) Then
    Selection.MoveDown unit:=wdParagraph, Count:=ActiveDocument.Paragraphs.Count - 2, Extend:=wdExtend
    Selection.Font.Name = "GB2312"
    Selection.Font.Size = 16
    Selection.MoveRight unit:=wdCharacter, Count:=1
    End If
    
'   加空段落
    ActiveDocument.Paragraphs(2).Range.InsertAfter Chr(13)

'   關(guān)鍵字居中或加粗
    Dim arr_sum(), arr(14), m As Integer, q
    arr(0) = "宣布法庭紀律"
    arr(1) = "宣布開庭"
    arr(2) = "法庭調(diào)查"
    arr(3) = "最后陳述"
    arr(4) = "法庭調(diào)解"
    arr(5) = "當庭宣判"
    arr(6) = "宣布法庭組成人員和書記員名單"
    arr(7) = "宣布法庭組成人員和書記員名單"
    arr(8) = "告知當事人有關(guān)的訴訟權(quán)利和義務(wù)"
    arr(9) = "訴稱部分"
    arr(10) = "答辯部分"
    arr(11) = "法庭歸納爭議焦點"
    arr(12) = "當事人舉證質(zhì)證部分"
    arr(13) = "原告舉證部分"
    arr(14) = "被告舉證部分"
    For m = 0 To 14
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = arr(m)
        .Replacement.Text = ""
        .Format = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = True
        .MatchWildcards = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    
    s = ActiveDocument.Range(0, Selection.End).Paragraphs.Count
    q = ActiveDocument.Paragraphs(s).Range.Characters.Count
    Selection.Find.Execute
    If Selection.Font.Bold = False Then
        Selection.Font.Bold = wdToggle
    End If
    If m <= 5 Then
    Selection.Font.Size = 18
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    End If
    
  
    Next
    
    
'   案由,案號替換格式
    
    Set myRangeb = ActiveDocument.Content
    myRangeb.Find.ClearFormatting
    Dim b As Long
    b = myRangeb.End
    Do While myRangeb.Find.Execute("案號")
    myRangeb.Select
    myRangeb.Text = "案    號"
    myRangeb.Start = myRangeb.Start + Len(myRangeb.Find.Text)
    myRangeb.End = b
    Loop
        
    
    
    
    Set myRangea = ActiveDocument.Content
    myRangea.Find.ClearFormatting
    Dim f As Long
    f = myRangea.End
    Do While myRangea.Find.Execute("案由")
    myRangea.Select
    myRangea.Text = "案    由"
    myRangea.Start = myRangea.Start + Len(myRangea.Find.Text)
    myRangea.End = f
    Loop
    
'   關(guān)鍵字用縮進方式對齊
    Dim arr2(7), j As Integer
    arr2(0) = "人民陪審員:"
    arr2(1) = "審判員:"
    arr2(2) = "書記員:"
    arr2(3) = "有無間斷:"
    arr2(4) = "其他說明:"
    arr2(5) = "結(jié)束時間:"
    arr2(6) = "原告方:"
    arr2(7) = "被告方:"
    For j = 0 To 7
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = arr2(j)
        .Replacement.Text = ""
        .Format = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = True
        .MatchWildcards = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
    Selection.ParagraphFormat.LeftIndent = 165
    If j <= 2 Then
    Selection.ParagraphFormat.LeftIndent = 110
    End If
    If j > 5 Then
    Selection.ParagraphFormat.LeftIndent = 330
    End If
    Next
    

End Sub

完成目標

  1. 設(shè)置標題及前三段的字體,字號
  2. 首行縮進
  3. 去除多余空格揖曾,制表符贩毕,空段
  4. 對特殊要求字符進行個別縮進
  5. 替換字符
  6. 頁面設(shè)置:頁邊距悯许,行距,頁眉頁腳等耳幢。

防坑指南

  1. 清除格式要求:盡量不要用剪切純文本方式來清除格式
selection.WholeStory
Selection.ClearParagraphDirectFormatting
  1. 程序執(zhí)行是有順序的岸晦,特別在word中,光標的位置隨著程序的執(zhí)行要注意位置,例如查找字符的時候,特別需要注意擒悬。
  2. 關(guān)鍵字設(shè)置格式氏淑,要注意數(shù)組越界。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乙埃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌包券,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炫贤,死亡現(xiàn)場離奇詭異溅固,居然都是意外死亡,警方通過查閱死者的電腦和手機兰珍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門侍郭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掠河,你說我怎么就攤上這事亮元。” “怎么了唠摹?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵爆捞,是天一觀的道長。 經(jīng)常有香客問我勾拉,道長煮甥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任藕赞,我火速辦了婚禮苛秕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘找默。我一直安慰自己艇劫,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著店煞,像睡著了一般蟹演。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顷蟀,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天酒请,我揣著相機與錄音,去河邊找鬼鸣个。 笑死羞反,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的囤萤。 我是一名探鬼主播昼窗,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涛舍!你這毒婦竟也來了澄惊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤富雅,失蹤者是張志新(化名)和其女友劉穎掸驱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體没佑,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡毕贼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛤奢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帅刀。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖远剩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骇窍,我是刑警寧澤瓜晤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站腹纳,受9級特大地震影響痢掠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘲恍,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一足画、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佃牛,春花似錦淹辞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔬将。三九已至,卻和暖如春央星,著一層夾襖步出監(jiān)牢的瞬間霞怀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工莉给, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留毙石,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓颓遏,卻偏偏與公主長得像徐矩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子州泊,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容