ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助](麻烦守版主:)关于录制宏的问题?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-11-30 05:53 | 显示全部楼层
QUOTE:
以下是引用tangqingfu在2006-11-28 23:04:52的发言:

感谢守版主百忙之中的热情帮助。

今天测试了版主的代码,感觉非常好用,守版主的功力真是出神入化了!实在是令人佩服!

版主近来事忙,屡次麻烦守版主真是不好意思!测试版主代码后,发现的一些问题和想法,期望版主以后帮忙改进一下:

1、选择对话框:选项样式设置(选择1),替换后选项A.B.C.D.和后面的内容相连,出现红色波浪线(word默认是语法错误),这不利于查找文档其他内容的语法错误,如何才能避免这种问题?

2、替换后英文选择题16A、B、C、选项在一行,D、在第二行,(当选择选项样式设置为2时,也会出现这种情况;英文选择题第6题情况更为怪异。从选择的选项样式设置来看,设置为2时,可能出现的问题大于设置为3的情况,如本文档里有英文选择题第6、16题情况)能否做到当A、B、C、D、选项以两行排列时,选项A、D、选项对齐,B、D、选项对齐?

3、中文选择题第2,B.D.选项不对齐, 能否做到当A.B.C.D.选项以两行排列时,选项A.D.选项对齐,B.D.选项对齐?

4、中文选择题题目后的括号大小不一,没有和英文选择题的括号大小一致。

5、当文档内容来自不同的文档时,往往会出现文档内容的字体,字号和行距不一,请教如何才能做到将(选中)所有的字体,字号和行距设置为宋体,小四,行距为单倍行距;英文部分为Times New Roman,小四,行距为单位行距?

多次打扰版主,深感不安!版主以后有空时,能否帮忙解决上面的问题?


见附件:

第1个问题,我已在代码中进行了修改,即加入一个半角空格即可。

第2、3个问题,与制表位无关,制表位能起到对齐作用,但不是万能的,制表制只是一个行内空间,如果你的文字已间占有了制表位的地盘了,制表位只能“忍辱负重-隐藏自我”了,所以,制作原始试卷时,如果行内文字较多的话,应该主动换行而不是让WORD 的制表位来调整。

第4个问题,也与制表位有关,我改了两个全角空格,但也并非是绝对一致的,WORD在特殊换行的情况下,空格是可以变化宽度的(当然,你的试卷中可能性不大。

第5个问题,已加入代码。

hhG2iLjV.rar (16.5 KB, 下载次数: 6)

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-30 15:54 | 显示全部楼层

谢谢守版主的不厌其烦的指点!

关于第5个问题,守主说已加入代码,但我运行,并没有变化。

设置思路:

中文部分字体、字号、字形和行距设置为宋体,小四,常规,字符间距:缩放100%,间距为标准,位置为标准;段落的对齐方式为左对齐,行距为单倍行距
   

英文部分为Times New Roman,小四,常规、;字符间距:缩放100%,间距为标准,位置为标准;段落的对齐方式为左对齐,行距为单倍行距。

PS:能否设置将中文字体的行距设置为1.2倍或设为固定值20磅?

把以英文为主的:

如:Why do the students collect empty(倒空) bottles?视为英文部分

把以中文为主的:

如:为什么学生不将瓶子(bottles)倒空呢?视为中文部分

以下是我录制的关于统一字体和段落格式的代码(可是在运行后,发现下划线都没有了!),能否请版主帮忙修改一下或写相关的一段代码,放在原来的代码中?(附件在代码下面:此附件里的文档选项之间是一个或多少制表符,或是用空格隔开的,如果用原来的替换代码,会出现排版错乱,也请版主帮帮忙,不是想考版主,只是因为在今天下载一个地理试卷时发现该文档的选项隔开是用一个或多个制表符的,所以想一并再问一下,希望能一劳永逸,还请版主理解。

Sub 字体及段落设置()
'
' 字体及段落设置 Macro
' 宏在 2006-11-30 由 tangqingfu 录制
'
    With Selection.Font
        .NameFarEast = "宋体"
        .NameAscii = "Times New Roman"
        .NameOther = "Times New Roman"
        .Name = ""
        .Size = 12
        .Bold = False
        .Italic = False
        .Underline = wdUnderlineNone
        .UnderlineColor = wdColorAutomatic
        .StrikeThrough = False
        .DoubleStrikeThrough = False
        .Outline = False
        .Emboss = False
        .Shadow = False
        .Hidden = False
        .SmallCaps = False
        .AllCaps = False
        .Engrave = False
        .Superscript = False
        .Subscript = False
        .Spacing = 0
        .Scaling = 100
        .Position = 0
        .Kerning = 1
        .Animation = wdAnimationNone
        .DisableCharacterSpaceGrid = False
        .EmphasisMark = wdEmphasisMarkNone
    End With
    With Selection.ParagraphFormat
        .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
        .OutlineLevel = wdOutlineLevelBodyText
        .CharacterUnitRightIndent = 0
        .LineUnitBefore = 0
        .LineUnitAfter = 0
        .AutoAdjustRightIndent = True
        .FarEastLineBreakControl = True
        .WordWrap = True
        .HangingPunctuation = True
        .HalfWidthPunctuationOnTopOfLine = False
        .AddSpaceBetweenFarEastAndAlpha = True
        .AddSpaceBetweenFarEastAndDigit = True
        .BaseLineAlignment = wdBaselineAlignAuto
    End With
End Sub

yvc2sFue.rar (10.21 KB, 下载次数: 3)


[此贴子已经被作者于2006-11-30 19:33:22编辑过]

F6FeN6Bp.rar

10.05 KB, 下载次数: 2

npF5RkwU.rar

10.23 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2006-12-1 06:10 | 显示全部楼层
QUOTE:
以下是引用tangqingfu在2006-11-30 15:54:34的发言:

谢谢守版主的不厌其烦的指点!

关于第5个问题,守主说已加入代码,但我运行,并没有变化。

设置思路:

中文部分字体、字号、字形和行距设置为宋体,小四,常规,字符间距:缩放100%,间距为标准,位置为标准;段落的对齐方式为左对齐,行距为单倍行距
   

英文部分为Times New Roman,小四,常规、;字符间距:缩放100%,间距为标准,位置为标准;段落的对齐方式为左对齐,行距为单倍行距。

PS:能否设置将中文字体的行距设置为1.2倍或设为固定值20磅?

把以英文为主的:

如:Why do the students collect empty(倒空) bottles?视为英文部分

把以中文为主的:

如:为什么学生不将瓶子(bottles)倒空呢?视为中文部分

见鬼了,明明昨天早上我保存了的新代码,怎么没有了吗?晕死我了,所以闹笑话了。

今晨又重写了代码,并加入了行距自动判断,可见代码中的注释部分。

另,新附件中的问题(分隔符)等,等我空了再说吧。

 

A4NrGA7j.rar (20.92 KB, 下载次数: 6)

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-1 06:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢守版主的多次指导!

行距自动判断代码已发挥作用!这几天再多找些格式不一的文档进行测试,再汇报测试结果!

TA的精华主题

TA的得分主题

发表于 2006-12-3 16:57 | 显示全部楼层
QUOTE:
以下是引用tangqingfu在2006-11-30 15:54:34的发言:

谢谢守版主的不厌其烦的指点!

附件在代码下面:此附件里的文档选项之间是一个或多少制表符,或是用空格隔开的,如果用原来的替换代码,会出现排版错乱,也请版主帮帮忙,不是想考版主,只是因为在今天下载一个地理试卷时发现该文档的选项隔开是用一个或多个制表符的,所以想一并再问一下,希望能一劳永逸,还请版主理解

修改一下这句代码即可,

            .Text = "([!a-zA-Z])[  ^t" & ChrW(160) & "]{1,}"
我已在附件中包含了完整代码.

 

GdB8eiXp.rar (17.27 KB, 下载次数: 6)

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-3 22:15 | 显示全部楼层

谢谢守版!在弹出“选项样式设置”时,总是会出现“控件工具栏”;在“确定”后,还会出现“退出设计模式”,如何才能在运行代码时不让其出现?

用22楼的附件进行测试,发现代码怎么又不能做到行距自动统一设置了

[em06][em06][em06]

Sub myReplace()
'基于选定内容的查找与替换
    Dim myFind() As Variant, myReplace As String
    Dim aArray As Variant, mySet As String, N As Integer, M As Integer
    Dim myRange As Range
    myFind = Array("A", "B", "C", "D", "A", "B", "C", "D")
    Application.ScreenUpdating = False
    With Selection
        '删除段落的首行缩进\左缩进和右缩进
        With .ParagraphFormat
            .CharacterUnitLeftIndent = 0
            .CharacterUnitRightIndent = 0
            .CharacterUnitFirstLineIndent = 0
            .LeftIndent = CentimetersToPoints(0)
            .RightIndent = CentimetersToPoints(0)
            .FirstLineIndent = CentimetersToPoints(0)
            .TabStops.ClearAll    '清除文档中所有制表位
            .Space1    '单倍行距
        End With
        '设置字体字号
        With .Font
            .NameFarEast = "宋体"
            .NameAscii = "Times New Roman"
            .NameOther = "Times New Roman"
            .Name = ""
            .Size = 12
        End With
        '删除文档中所有非下划线的非英文后的一个或者多个全角\半角空格,包括段前空格\括号间空格
        With .Find
            .ClearFormatting
            .Replacement.ClearFormatting
           .Text = "([!a-zA-Z])[  ^t" & ChrW(160) & "]{1,}"
            .MatchWildcards = True
            .Wrap = wdFindStop
            .Font.Underline = False
            .Execute replacewith:="\1", Replace:=wdReplaceAll
        End With
        '将连续5个中文字符以上段落的行距设置为20磅固定行距,可视具体情况更改之
        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(0.74)
                .ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(4.07)
                .ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(7.41)
                .ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(10.74)
            End With
            .Text = "[A-DA-D][.、.]"
            .Replacement.Text = "^t^&"
            .Wrap = wdFindStop
            .Format = True
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
        End With
        '针对AB和CD选项为两个段落的情况,重设制表位(删除4.07)
        Set myRange = Selection.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(0.74)
                    .ParagraphFormat.TabStops.Add CentimetersToPoints(7.41)
                    .SetRange .End, Selection.Range.End
                    GoTo NR1
                End With
            Loop
        End With
        '规避查找中的过于复杂的表达式
        Set myRange = Selection.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(0.74)
                    .ParagraphFormat.TabStops.Add CentimetersToPoints(7.41)
                    .SetRange .End, Selection.Range.End
                    GoTo NR2
                End With
            Loop
        End With
        '进行中英文括号替换,中间加入一个制表符
        With .Find
            .ClearFormatting
            .Replacement.ClearFormatting
            '            .Replacement.ParagraphFormat.TabStops.ClearAll
            '            .Replacement.Font.Spacing = 12
            .MatchWildcards = True
            '替换为带有两个全角空格的西文括号
            '            .Execute findtext:="[\((][\))]", replacewith:="(" & vbTab & ")", Replace:=wdReplaceAll
            .Execute findtext:="[\((][\))]", replacewith:="(  ) ", Replace:=wdReplaceAll
        End With
        '更改或者统一文档选项样式
        mySet = VBA.InputBox(prompt:="请选择选项样式,1为'A.',2为'A.',3为 'A、',单击取消退出替换!", Title:="选项样式设置", Default:=1)
        Select Case mySet
        Case ""
            Exit Sub
        Case 1
            myReplace = ". "    '"[A-D]."还一个半角空格,防止拼写检查错误
            N = 64
        Case 2
            myReplace = "."    '"[A-D]."
            N = -23616
        Case 3
            myReplace = "、"    '"[A-D]、"
            N = 64
        Case Else
            myReplace = aArray
            If aArray = "[A-D]." Then
                N = -23616
            Else
                N = 64
            End If
        End Select
        For Each aArray In myFind
            M = M + 1
            If M = 5 Then M = 1
            '            Debug.Print VBA.Chr(M + N) & myReplace
            With .Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .MatchWildcards = True
                .Wrap = wdFindStop
                .Execute findtext:=aArray & "[.、.]", replacewith:=VBA.Chr(M + N) & myReplace, Replace:=wdReplaceAll
            End With
        Next
    End With
    Application.ScreenUpdating = True
End Sub


[此贴子已经被作者于2006-12-3 22:30:41编辑过]
VMTy6U79.jpg

TA的精华主题

TA的得分主题

发表于 2006-12-4 05:59 | 显示全部楼层

关于制表位的作用,我已经在前面的论述中讲解过了,我不想多说了,楼主应该自行理解,我想这并非是个很以理解的问题。

关于“设计模式”“控件工具箱”的问题,与“选项设置”输入框并无直接联系,您可以通过以下两种方法:

1:重启Word,将打开一个空白文档,关闭控件工具箱后退出Word.

2:检查你的宏安全性设置,如果为非低,WORD将自动进入设计模式。请重新设置WORD宏安全性为低,然后退出并重启Word。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-4 09:57 | 显示全部楼层

谢谢守版对“设计模式”“控件工具箱”的回复,另外我在26楼问是的关于行距的问题,而版主好像回答到了制表位,两者好像是没有什么联系吧?再请守版帮忙!


[此贴子已经被作者于2006-12-4 10:09:43编辑过]
ML8SyMzr.jpg

TA的精华主题

TA的得分主题

发表于 2006-12-5 06:22 | 显示全部楼层
QUOTE:
以下是引用tangqingfu在2006-12-4 9:57:26的发言:

谢谢守版对“设计模式”“控件工具箱”的回复,另外我在26楼问是的关于行距的问题,而版主好像回答到了制表位,两者好像是没有什么联系吧?再请守版帮忙!


 

Sorry,看错了,修改了代码,请测试:

 这是新的完整代码。

5ZVMMAF0.rar (19.77 KB, 下载次数: 6)

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-5 12:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢守版!这个问题解决了!

但现在又出现新的问题:

本楼附件里的文档用25楼或29楼的代码运行,发现一直处于漏斗形,而且此形状还不停地闪,不能完成替换,能否请版主帮忙测试、解决?

bKbedJqn.rar (10.51 KB, 下载次数: 4)
[此贴子已经被作者于2006-12-5 12:09:54编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 06:54 , Processed in 0.046580 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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