ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何用VBA在页脚加入“第X页 共XX页”

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-2-25 22:32 | 显示全部楼层 |阅读模式
页面为B4分为二栏;谢谢!

TA的精华主题

TA的得分主题

发表于 2012-2-26 19:42 | 显示全部楼层
我有一试卷模板,双栏页码,是根据一位电脑专家的技巧而设的页码,现在通过反复试验,终于把它录制成宏,成功!但未精简代码,楼主先对付着用吧,有时间再精简一下,下面是录制的宏(WORD 2003 VBA):

Sub 插入页码_双栏_第X页_共Y页()
'
' j Macro
' 宏在 2012-2-26 由 微软用户 录制
'
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
        ActivePane.View.Type = wdOutlineView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    If Selection.HeaderFooter.IsHeader = True Then
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    Else
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    End If
    With Selection.ParagraphFormat
        .LeftIndent = CentimetersToPoints(0)
        .RightIndent = CentimetersToPoints(0)
        .SpaceBefore = 0
        .SpaceBeforeAuto = False
        .SpaceAfter = 0
        .SpaceAfterAuto = False
        .LineSpacingRule = wdLineSpaceSingle
        .Alignment = wdAlignParagraphLeft
        .WidowControl = False
        .KeepWithNext = False
        .KeepTogether = False
        .PageBreakBefore = False
        .NoLineNumber = False
        .Hyphenation = True
        .FirstLineIndent = CentimetersToPoints(0)
        .OutlineLevel = wdOutlineLevelBodyText
        .CharacterUnitLeftIndent = 0
        .CharacterUnitRightIndent = 0
        .CharacterUnitFirstLineIndent = 0
        .LineUnitBefore = 0
        .LineUnitAfter = 0
        .AutoAdjustRightIndent = False
        .DisableLineHeightGrid = True
        .FarEastLineBreakControl = True
        .WordWrap = True
        .HangingPunctuation = True
        .HalfWidthPunctuationOnTopOfLine = False
        .AddSpaceBetweenFarEastAndAlpha = True
        .AddSpaceBetweenFarEastAndDigit = True
        .BaseLineAlignment = wdBaselineAlignAuto
    End With
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:= _
        2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitFixed
    With Selection.Tables(1)
        If .Style <> "网格型" Then
            .Style = "网格型"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = True
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = True
    End With
    Selection.Tables(1).Select
    Selection.Borders(wdBorderTop).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderRight).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
    Selection.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.Tables(1).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="第"
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
        PreserveFormatting:=False
    Selection.TypeText Text:="=2*"
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldPage
    Selection.TypeText Text:="-1"
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.TypeText Text:="页,共"
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
        PreserveFormatting:=False
    Selection.TypeText Text:="=2*"
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldNumPages
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.TypeText Text:="页"
    Selection.MoveRight Unit:=wdCell
    Selection.TypeText Text:="第"
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
        PreserveFormatting:=False
    Selection.TypeText Text:="=2*"
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldPage
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.TypeText Text:="页,共"
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
        PreserveFormatting:=False
    Selection.TypeText Text:="=2*"
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldNumPages
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.TypeText Text:="页"
    ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes
    ActiveWindow.View.TableGridlines = Not ActiveWindow.View.TableGridlines
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-27 21:21 | 显示全部楼层
本帖最后由 thunor 于 2012-2-27 21:23 编辑

朋友,谢谢您。实话说吧,这个代码其实我写出来了。
问题的关键是这样的:我将一篇文档设为三个节,且奇偶页不同。
第一个节的页码为:节I 第X页,共XX页。
第二个节的页码为:节II第X页,共XX页。
第三个节的页码为:节III第X页,共XX页。
在WORD中也设置成功了。
其中若XX仅只包括第一节和第二节的页码。由于加了判断语句,页码就再也不能成功生成了。昏!
在这儿求助主要是想看看还有没有别的代码实现加入页脚。

TA的精华主题

TA的得分主题

发表于 2012-2-28 11:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 413191246se 于 2012-2-28 15:24 编辑

没看明白楼主3楼回答!——你的节和节之间不想彻底断?断就断开页眉、页脚。

TA的精华主题

TA的得分主题

发表于 2018-1-15 19:55 | 显示全部楼层
thunor 发表于 2012-2-27 21:21
朋友,谢谢您。实话说吧,这个代码其实我写出来了。
问题的关键是这样的:我将一篇文档设为三个节,且奇偶 ...

怎么写的代码,发上来分享一下吧。谢谢!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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