VBA 和 Publisher - 替换母版页中的文本
VBA and Publisher - replacing text in a master page
最近我在工作中一直在与出版商斗争,最近的担忧是软件无法提供像自动更新这样简单的东西 "total pages" 计数。
我决定研究宏以寻求解决方案,但由于我对 VBA 的了解有限,我只是在遇到障碍之前变得如此肥胖。
我想创建一个在打开文档时自动启动的宏,并尽可能频繁地更新母版页中的文本框。
文本框应显示 "page X of Y",但由于发布者的限制,只有 "X" 会在不使用宏的情况下自动更新。
我现在拥有的:
Private WithEvents PubApp As Publisher.Application
Private Sub Document_Open()
Set PubApp = Publisher.Application
End Sub
Private Sub PubApp_WindowPageChange(ByVal Vw As View)
MsgBox "Your publication contains " & _
ActiveDocument.Pages.Count & " page(s)."
End Sub
该宏会在文档打开时自动启动,并在用户每次更改页面时创建一个包含总页码的弹出窗口。
所以,我完成了目标的前半部分,但剩下的部分我需要一些帮助。
这是适用于遇到相同问题的任何人的有效宏
Private WithEvents PubApp As Publisher.Application
Private Sub Document_Open()
Set PubApp = Publisher.Application
End Sub
Private Sub PubApp_WindowPageChange(ByVal Vw As View)
Dim mp As MasterPages
Set mp = ActiveDocument.MasterPages
With mp.Item(1)
.Shapes(19).TextFrame.TextRange.Text = ""
.Shapes(19).TextFrame.TextRange.InsertPageNumber
.Shapes(19).TextFrame.TextRange.InsertBefore _
NewText:="Page "
If ActiveDocument.Pages.Count > 9 Then
.Shapes(19).TextFrame.TextRange.InsertAfter _
NewText:=" of " & _
ActiveDocument.Pages.Count
Else
.Shapes(19).TextFrame.TextRange.InsertAfter _
NewText:=" of 0" & _
ActiveDocument.Pages.Count
End If
End With
End Sub
X
在 mp.Item(X)
中标识您的母版页(如果您有多个母版页)。
Y
in Shapes(Y)
标识目标文本框。
宏在后台运行,无需主动输入,并在每次页面更改时刷新目标文本框的内容。
由于文档中使用的自动页码格式是“01, 02, 03 ... 11, 12 13
”,因此我添加了一个 If 选择,如果所述数字低于 [=17,则在总页数之前添加 0
=].
我确信有更优雅的方法可以解决这个问题,但是嘿,至少它是有效的。
这里是对任何其他试图研究有关使用 Publisher 中的 VBA 以编程方式更改母版页中的 header 或页脚的有限信息的人的澄清。此技巧还包括对如何在 header:
的左、中、右部分添加文本的说明
所有功劳归于M.Baroni
Function FixHeader1()
Dim mp As MasterPages
Set mp = ActiveDocument.MasterPages
With mp.Item(1)
.Header.TextRange.text = "My Publication" & vbTab
.Header.TextRange.InsertPageNumber
.Header.TextRange.InsertAfter NewText:=vbTab & MonthName(Month(Date)) & " " & Year(Date)
End With
End Function
最近我在工作中一直在与出版商斗争,最近的担忧是软件无法提供像自动更新这样简单的东西 "total pages" 计数。
我决定研究宏以寻求解决方案,但由于我对 VBA 的了解有限,我只是在遇到障碍之前变得如此肥胖。
我想创建一个在打开文档时自动启动的宏,并尽可能频繁地更新母版页中的文本框。 文本框应显示 "page X of Y",但由于发布者的限制,只有 "X" 会在不使用宏的情况下自动更新。
我现在拥有的:
Private WithEvents PubApp As Publisher.Application
Private Sub Document_Open()
Set PubApp = Publisher.Application
End Sub
Private Sub PubApp_WindowPageChange(ByVal Vw As View)
MsgBox "Your publication contains " & _
ActiveDocument.Pages.Count & " page(s)."
End Sub
该宏会在文档打开时自动启动,并在用户每次更改页面时创建一个包含总页码的弹出窗口。
所以,我完成了目标的前半部分,但剩下的部分我需要一些帮助。
这是适用于遇到相同问题的任何人的有效宏
Private WithEvents PubApp As Publisher.Application
Private Sub Document_Open()
Set PubApp = Publisher.Application
End Sub
Private Sub PubApp_WindowPageChange(ByVal Vw As View)
Dim mp As MasterPages
Set mp = ActiveDocument.MasterPages
With mp.Item(1)
.Shapes(19).TextFrame.TextRange.Text = ""
.Shapes(19).TextFrame.TextRange.InsertPageNumber
.Shapes(19).TextFrame.TextRange.InsertBefore _
NewText:="Page "
If ActiveDocument.Pages.Count > 9 Then
.Shapes(19).TextFrame.TextRange.InsertAfter _
NewText:=" of " & _
ActiveDocument.Pages.Count
Else
.Shapes(19).TextFrame.TextRange.InsertAfter _
NewText:=" of 0" & _
ActiveDocument.Pages.Count
End If
End With
End Sub
X
在 mp.Item(X)
中标识您的母版页(如果您有多个母版页)。
Y
in Shapes(Y)
标识目标文本框。
宏在后台运行,无需主动输入,并在每次页面更改时刷新目标文本框的内容。
由于文档中使用的自动页码格式是“01, 02, 03 ... 11, 12 13
”,因此我添加了一个 If 选择,如果所述数字低于 [=17,则在总页数之前添加 0
=].
我确信有更优雅的方法可以解决这个问题,但是嘿,至少它是有效的。
这里是对任何其他试图研究有关使用 Publisher 中的 VBA 以编程方式更改母版页中的 header 或页脚的有限信息的人的澄清。此技巧还包括对如何在 header:
的左、中、右部分添加文本的说明所有功劳归于M.Baroni
Function FixHeader1()
Dim mp As MasterPages
Set mp = ActiveDocument.MasterPages
With mp.Item(1)
.Header.TextRange.text = "My Publication" & vbTab
.Header.TextRange.InsertPageNumber
.Header.TextRange.InsertAfter NewText:=vbTab & MonthName(Month(Date)) & " " & Year(Date)
End With
End Function