查看原文
其他

ABCD选项对齐工具代码:一键让完形填空选项排版更轻松

ZSHUNJ 高中英语教学交流网 2023-03-09


很久以前(第一个版本是在2011年),制作过一个ZSHUNJ工具箱。第三个版本(2012年)后就没有再更新了。


我一直都在使用,而且我个人使用的版本偶尔还会增加一些内容,不过使用率最高的依然是ABCD选项对齐。


ABCD选项对齐,主要是针对于完形填空的选项排版。一键操作,排版后选项整齐美观,当然选择题部分(任何科目)也是可以使用。


随着office版本的升级(最初是2003,现在2016都有了),一些机制改变了,使用起来有些不方便。


有留言询问何时再更新,考虑之后,觉得使用一种容易操作的方式使得这个对齐功能能够使用就行。


操作步骤:


1以word 2016 版本为例,开发工具-宏-宏名-创建




2复制如下代码到下图中到位置,保存。


Sub ABCD选项对齐()

    Dim myFind() As Variant, myReplace As String

    Dim aArray As Variant, mySet As String, n As Integer, M As Integer

    Dim myRange As Range, myBk As Bookmark

    myFind = Array("A", "B", "C", "D", "E", "F", "G", "A", "B", "C", "D")

    If Selection.Type = wdSelectionIP Then Exit Sub

    Application.ScreenUpdating = False

    Set myBk = ActiveDocument.Bookmarks.Add(Name:="Temp", Range:=Selection.Range)

    With myBk.Range

       With .ParagraphFormat

            .CharacterUnitLeftIndent = 0

            .CharacterUnitRightIndent = 0

            .CharacterUnitFirstLineIndent = 0

            .LeftIndent = CentimetersToPoints(0)

            .RightIndent = CentimetersToPoints(0)

            .FirstLineIndent = CentimetersToPoints(0)

            .TabStops.ClearAll

            .LineSpacingRule = wdLineSpaceExactly

            .LineSpacing = 20

        End With

     

        With .Font

            .NameFarEast = "宋体"

            .NameAscii = "Times New Roman"

            .NameOther = "Times New Roman"

            .Name = "Times New Roman"

            .Size = 15

        End With

 


        With .Find

            .ClearFormatting

            .Replacement.ClearFormatting

            .Wrap = wdFindStop

            .MatchWildcards = False

            .Execute findtext:="^t", replacewith:="", Replace:=wdReplaceAll

        End With

 


        With .Find

            .ClearFormatting

            .Replacement.ClearFormatting

            .Text = "([!a-zA-Z])[  " & ChrW(160) & "]{1,}"

            .MatchWildcards = True

            .Wrap = wdFindStop

            .Font.Underline = False

            .Execute replacewith:="\1", Replace:=wdReplaceAll

        End With

 


        With .Find

            .ClearFormatting

            .Format = True

            .Replacement.ClearFormatting

            .Replacement.ParagraphFormat.LineSpacingRule = wdLineSpaceExactly

            .Replacement.ParagraphFormat.LineSpacing = 20

            .MatchWildcards = True

            .Wrap = wdFindStop

            .Text = "[一-龥]{5,}"

            .Execute replacewith:="", Replace:=wdReplaceAll

        End With

     


        With .Find

            .ClearFormatting

            With .Replacement

                .ClearFormatting

                .ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(1.11)

                .ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(5.11)

                .ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(10.11)

                .ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(15.11)

            End With

            .Text = "[A-G A-D][.、.]"

            .Replacement.Text = "^t^&"

            .Wrap = wdFindStop

            .Format = True

            .MatchWildcards = True

            .Execute Replace:=wdReplaceAll

        End With

       


        Set myRange = myBk.Range

NR1:         With myRange.Find

            .ClearFormatting

            .Replacement.ClearFormatting

            .Text = "A[.、.][!^13]@B[.、.][!^13]@^13^tC[.、.]*D[.、.]*^13"

            .MatchWildcards = True

            Do While .Execute

                With myRange

                    .ParagraphFormat.TabStops.ClearAll

                    .ParagraphFormat.TabStops.Add CentimetersToPoints(1.11)

                    .ParagraphFormat.TabStops.Add CentimetersToPoints(10.11)

                    .SetRange .End, myBk.Range.End

                    GoTo NR1

                End With

            Loop

        End With



        Set myRange = myBk.Range

NR2:         With myRange.Find

            .ClearFormatting

            .Replacement.ClearFormatting

            .Text = "A[.、.][!^13]@B[.、.][!^13]@^13^tC[.、.]*D[.、.]*^13"

            .MatchWildcards = True

            Do While .Execute

                With myRange

                    .ParagraphFormat.TabStops.ClearAll

                    .ParagraphFormat.TabStops.Add CentimetersToPoints(1.11)

                    .ParagraphFormat.TabStops.Add CentimetersToPoints(10.11)

                    .SetRange .End, myBk.Range.End

                    GoTo NR2

                End With

            Loop

        End With



        With .Find

            .ClearFormatting

            .Replacement.ClearFormatting

            .MatchWildcards = True

            .Execute findtext:="[\((][\))]", replacewith:="(^32^32^32) ", Replace:=wdReplaceAll

        End With

        With .ParagraphFormat

            .LineUnitBefore = 0

            .LineUnitAfter = 0

            .SpaceBefore = 0

            .SpaceAfter = 0

            .SpaceBeforeAuto = False

            .SpaceAfterAuto = False

        End With


        mySet = VBA.InputBox(Prompt:="请选择选项样式,1为'A.',2为'A.',3为 'A、',单击取消退出替换!", Title:="选项样式设置", Default:=1)

        Select Case mySet

        Case ""

            myBk.Delete

            Exit Sub

        Case 1

            myReplace = ". "

            n = 64

        Case 2

            myReplace = "."

            n = 64

        Case 3

            myReplace = "、"

            n = 64

        Case Else

            myReplace = aArray

            If aArray = "[A-G]." Then

                n = -23616

            Else

                n = 64

            End If

        End Select

        For Each aArray In myFind

            M = M + 1

            If M = 8 Then M = 1

                    With .Find

                .ClearFormatting

                .Replacement.ClearFormatting

                .MatchWildcards = True

                .Wrap = wdFindStop

                .Execute findtext:=aArray & "[.、.]", replacewith:=VBA.Chr(M + n) & myReplace, Replace:=wdReplaceAll

            End With

        Next

        myBk.Delete

    End With

    Application.ScreenUpdating = True

End Sub



3为达到更好效果,建议页面设置为左右上下边距为2。


4使用时,选定ABCD,ALT+F8 调出如下界面,点击运行就行了。




5ABCD对齐之后再统一设置字体等排版操作。



由于office版本不同或电脑配置不同,运行时可能会出现一些错误提示。基本上按确定就可以。


如有其他问题,请留言。



  欢迎转发,让更多的英语教师排版轻松,快捷。  



点击阅读原文查看历史版本


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存