ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 页面设置

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-5-5 21:08 | 显示全部楼层 |阅读模式
本帖最后由 乐乐2006201505 于 2018-5-5 21:13 编辑

下面代码实现了设置各级别标题字体效果,但是一级标题段中有句号就会出错。还有把最后的句号删除。望哪位大师修改一下,同时实现其他要求。具体要求在第一个附件中,非常感谢!
ption Explicit
Sub 公文Text()
    Dim doc As Document, i As Paragraph
    Set doc = ActiveDocument

    Selection.WholeStory
    Selection.ClearFormatting
    CommandBars.FindControl(ID:=122).Execute
    CommandBars.FindControl(ID:=123).Execute
    删除空行
   
    Selection.WholeStory

    正文样式16

    Title2345

    For Each i In doc.Paragraphs
        With i.Range
            If .Style = "标题 2" Then
                .Font.Name = "黑体"
                .Font.Name = "Times New Roman"
            ElseIf .Style = "标题 3" Then
                .Font.Name = "楷体_GB2312"
                .Font.Name = "Times New Roman"
            ElseIf .Style = "标题 4" Then
                .Font.Name = "仿宋_GB2312"
                .Font.Name = "Times New Roman"
            ElseIf .Style = "标题 5" Then
                .Font.Name = "仿宋_GB2312"
                .Font.Name = "Times New Roman"
            ElseIf i.Range Like "[一二三四五六七八九十][,、 ]*" Or i.Range Like "[一二三四五六七八九十][是要]*" Then
                If Not i.Range Like "*。" & vbCr Then i.Range.Characters.Last.InsertBefore Text:="。"
                GoTo diyi
            End If
            If .Style <> "正文" Then
                If .Sentences.Count = 1 Then
                    If i.Range Like "*[。:;,、!?…—.:;,!?]" & vbCr Then i.Range.Characters.Last.Previous.Delete
                Else
diyi:
                    With .Font
                        .Name = "仿宋_GB2312"
                        .Name = "Times New Roman"
                        .Bold = False
'                        .Color = wdColorBlue
                    End With
                    With .Sentences(1).Font
                        .Bold = True
'                        .Color = wdColorBrown
                    End With
                End If
            End If
        End With
    Next
    特殊样式
End Sub

Sub 正文样式16()
    With Selection
        .ClearFormatting
        With .Font
            .Name = "仿宋_GB2312"
            .Name = "Times New Roman"
            .Size = 16
'            .Color = wdColorBlue
            .Kerning = 0
            .DisableCharacterSpaceGrid = True
        End With
        With .ParagraphFormat
            .LineSpacing = LinesToPoints(1.25)
            .CharacterUnitFirstLineIndent = 2
            .AutoAdjustRightIndent = False
            .DisableLineHeightGrid = True
        End With
    End With
End Sub

Sub Title2345()
    Dim mt, reg As Object, n&, m&, L&, ostr$, sr$, r1$, r2$, r3$, r4$
    ostr$ = Replace(ActiveDocument.Content, Chr(7), "")
    sr$ = "一二三四五六七八九十百零千〇"
    r1$ = "^[" & sr & "]+、": r2$ = "^[((]\s*[" & sr & "]+\s*[))]"
    r3$ = "^\d+[、..]": r4$ = "^[((]\s*\d+\s*[))]"
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.MultiLine = True
    reg.Pattern = "" & r2 & "|" & r1 & "|" & r4 & "|" & r3 & ""
    For Each mt In reg.Execute(ostr)
        m = mt.FirstIndex: n = mt.Length
        With ActiveDocument.Range(m, m + n)
            If Not .Information(wdWithInTable) Then
                .Expand 4: L = Len(.Text): .Collapse
                If .MoveWhile(sr, L) > 0 Then
                    .Expand 4
                    .Style = "标题 2"
'                    .Font.ColorIndex = 6
                ElseIf .MoveWhile("((", L) > 0 Then
                    If .MoveWhile(sr, L) > 0 Then
                        .Expand 4
                        .Style = "标题 3"
'                        .Font.ColorIndex = 5
                    Else
                        .Expand 4
                        .Style = "标题 5"
'                        .Font.ColorIndex = 12
                    End If
                Else
                    .Expand 4
                    .Style = "标题 4"
'                    .Font.ColorIndex = 11
                End If
            End If
        End With
    Next
End Sub

Sub 删除空行()
    Dim i As Paragraph
    For Each i In ActiveDocument.Paragraphs
        If Len(i.Range) = 1 And Asc(i.Range) = 13 Then i.Range.Delete
    Next
End Sub

Sub 特殊样式()
    With Selection
        With .Font
            .Size = 16
            .Kerning = 0
            .DisableCharacterSpaceGrid = True
        End With
        With .ParagraphFormat
            .SpaceBeforeAuto = False
            .SpaceAfterAuto = False
            .SpaceBefore = 0
            .SpaceAfter = 0
            .LineSpacing = LinesToPoints(1.25)
            .CharacterUnitFirstLineIndent = 2
            .AutoAdjustRightIndent = False
            .DisableLineHeightGrid = True
            .KeepWithNext = False
            .KeepTogether = False
        End With
    End With
End Sub

公文格式字体标题序号要求.rar

9.2 KB, 下载次数: 17

学生军训纪律.rar

13.31 KB, 下载次数: 6

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-5 22:31 | 显示全部楼层
本帖最后由 乐乐2006201505 于 2018-5-6 19:31 编辑

本代码大部分来自413191246se老师坛文《Word2003 通用模板宏(2018元旦版)》,非常感谢![size=1em]如能看到此坛文,希望能够完善一下,就是各级标题行不止一个句子时,剩余句子[size=1em]全部变为正文字体,即仿宋_GB2312,或者标红。
Option Explicit
Sub 公文Text修改版main()
    Dim doc As Document, i As Paragraph
    Set doc = ActiveDocument
    Selection.WholeStory
    Selection.ClearFormatting
    CommandBars.FindControl(ID:=122).Execute
    CommandBars.FindControl(ID:=123).Execute
    删除空行
    Selection.WholeStory
    正文样式16
    Title2345
    For Each i In doc.Paragraphs
        With i.Range
            If .Style = "标题 2" Then
                .Font.Name = "黑体"
                .Font.Name = "Times New Roman"
            ElseIf .Style = "标题 3" Then
                .Font.Name = "楷体_GB2312"
                .Font.Name = "Times New Roman"
            ElseIf .Style = "标题 4" Then
                .Font.Name = "仿宋_GB2312"
                .Font.Name = "Times New Roman"
            ElseIf i.Range Like "[一二三四五六七八九十][,、 ]*" Or i.Range Like "[一二三四五六七八九十][是要]*" Then
                If Not i.Range Like "*。" & vbCr Then i.Range.Characters.Last.InsertBefore Text:="。"
                    With .Font
                        .Name = "黑体"
                        .Name = "Times New Roman"
                        .Bold = False
                    End With
            End If
            If .Style <> "正文" Then
                If .Sentences.Count = 1 Then
                    If i.Range Like "*[。:;,、!?…—.:;,!?]" & vbCr Then i.Range.Characters.Last.Previous.Delete
                End If
            End If

        End With
    Next
    特殊样式
    test
    test设置标题格式
End Sub

Sub 正文样式16()
    With Selection
        .ClearFormatting
        With .Font
            .Name = "仿宋_GB2312"
            .Name = "Times New Roman"
            .Size = 16
            .Kerning = 0
            .DisableCharacterSpaceGrid = True
        End With
    End With
End Sub

Sub Title2345()
    Dim mt, reg As Object, n&, m&, L&, ostr$, sr$, r1$, r2$, r3$, r4$
    ostr$ = Replace(ActiveDocument.Content, Chr(7), "")
    sr$ = "一二三四五六七八九十百零千〇"
    r1$ = "^[" & sr & "]+、": r2$ = "^[((]\s*[" & sr & "]+\s*[))]"
    r3$ = "^\d+[、..]": r4$ = "^[((]\s*\d+\s*[))]"
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.MultiLine = True
    reg.Pattern = "" & r2 & "|" & r1 & "|" & r4 & "|" & r3 & ""
    For Each mt In reg.Execute(ostr)
        m = mt.FirstIndex: n = mt.Length
        With ActiveDocument.Range(m, m + n)
            If Not .Information(wdWithInTable) Then
                .Expand 4: L = Len(.Text): .Collapse
                If .MoveWhile(sr, L) > 0 Then
                    .Expand 4
                    .Style = "标题 2"
                ElseIf .MoveWhile("((", L) > 0 Then
                    If .MoveWhile(sr, L) > 0 Then
                        .Expand 4
                        .Style = "标题 3"
                    End If
                Else
                    .Expand 4
                    .Style = "标题 4"
                End If
            End If
        End With
    Next
End Sub

Sub 删除空行()
    Dim i As Paragraph
    For Each i In ActiveDocument.Paragraphs
        If Len(i.Range) = 1 And Asc(i.Range) = 13 Then i.Range.Delete
    Next
End Sub

Sub 删除首页页眉横线()
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
        Selection.ParagraphFormat.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub

Sub 取消首页页码()
    Selection.Sections(1).Footers(1).PageNumbers.Add PageNumberAlignment:=wdAlignPageNumberRight, FirstPage:=False
    删除首页页眉横线
End Sub

Sub 特殊样式()
    With Selection
        With .Font
            .Size = 16
            .Kerning = 0
            .DisableCharacterSpaceGrid = True
        End With
        With .ParagraphFormat
            .SpaceBeforeAuto = False
            .SpaceAfterAuto = False
            .SpaceBefore = 0
            .SpaceAfter = 0
            .LineSpacingRule = wdLineSpaceExactly
            .LineSpacing = 28
            .Alignment = wdAlignParagraphLeft
            .CharacterUnitFirstLineIndent = 2
            .AutoAdjustRightIndent = False
            .DisableLineHeightGrid = True
            .KeepWithNext = False
            .KeepTogether = False
        End With
    End With
End Sub

Sub test()
    Application.ScreenUpdating = False
    With ActiveDocument.Sections(1)
        .PageSetup.OddAndEvenPagesHeaderFooter = True
        With .Footers(wdHeaderFooterPrimary)
            With .PageNumbers
                .Add PageNumberAlignment:=wdAlignPageNumberRight
                .NumberStyle = wdPageNumberStyleNumberInDash
            End With
            With .Range.Frames(1)
                .HorizontalPosition = wdFrameRight
                '字体
                .Select
                Selection.Font.Name = "宋体"
                Selection.Font.Size = 12
                With .Range.ParagraphFormat
                    .Alignment = wdAlignParagraphRight
                    .CharacterUnitRightIndent = 1
                End With
            End With
        End With
        With .Footers(wdHeaderFooterEvenPages).Range.Frames(1)
            .HorizontalPosition = wdFrameLeft
            '字体
            .Select
            Selection.Font.Name = "宋体"
            Selection.Font.Size = 12
            With .Range.ParagraphFormat
                .Alignment = wdAlignParagraphLeft
                .CharacterUnitLeftIndent = 1
            End With
        End With
    End With
    '关闭页眉设置
    ActiveWindow.ActivePane.Close
    If ActiveWindow.View.SplitSpecial = wdPaneNone Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    Else
        ActiveWindow.View.Type = wdPrintView
    End If
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    Application.ScreenUpdating = True
End Sub

Sub test设置标题格式()
    Dim myDoc As Document, Content&
    Set myDoc = ActiveDocument
    Content = InputBox("请输入标题行有几行", "请输入", "1")
    myDoc.Range(myDoc.Paragraphs(1).Range.Start, myDoc.Paragraphs(Content).Range.End).Select
    Selection.ClearFormatting  '清除首行格式
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter  '设置首行居中对齐
    Selection.ParagraphFormat.LineUnitAfter = 1  '设置首行段后间距1行
    Selection.Font.Name = "方正小标宋简体"  '设置首行字体为“微软雅黑”
    Selection.Font.Size = 22  '设置首行字号为二号
    Selection.EndKey Unit:=wdLine  '移至首行末尾
End Sub

TA的精华主题

TA的得分主题

发表于 2018-5-6 17:37 来自手机 | 显示全部楼层
我认为标题末尾一般是不用句号的

TA的精华主题

TA的得分主题

发表于 2018-5-8 01:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 413191246se 于 2018-5-10 23:32 编辑

略。。。。。。。。。。。。

TA的精华主题

TA的得分主题

发表于 2018-5-10 20:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2018-5-8 01:37
乐乐 你好!谢谢你试用我的代码,老师不敢当!我也只是会一点皮毛而已。我注意到你的下载附件是 2007  ...

怎样设置固定的页眉,修改正文的字号大小。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 01:54 , Processed in 0.042692 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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