最近我一直在努力与出版商合作,最近引起关注的是软件无法提供简单的自动更新“总页数”。
我决定研究宏来寻找解决方案,但由于我对VBA的了解有限,我只是在遇到障碍之前变得非常胖。
我想创建一个在文档打开时自动启动的宏,并尽可能频繁地更新母版页中的文本框。 文本框应显示“Y页面X”,但由于出版商的限制,只有“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
当文档打开时,宏会自动启动,并在每次用户更改页面时创建一个包含总页码的弹出窗口。
所以,我完成了目标的前半部分,但我需要一些帮助。
答案 0 :(得分:0)
这是一个有问题的人的工作宏
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
中的 Shapes(Y)
标识目标文本框。
宏在后台运行,无需主动输入,并在每次更改页面时刷新目标文本框的内容。
由于文档中使用的自动页码编号格式为“01, 02, 03 ... 11, 12 13
”,因此如果所述数字低于0
,我会在总页数之前添加{If}选项以添加10
我确信有更优雅的方法来解决这个问题,但是嘿,至少它有效。
答案 1 :(得分:0)
以下是其他任何人尝试研究有限信息的说明,这些信息是使用Publisher中的VBA以编程方式更改母版页中的页眉或页脚。此提示还包括如何向标题的左侧,中间,右侧部分添加文本的说明:
所有功劳归于M.Baroni
KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt, ITERATION_COUNT, KEY_LENGTH);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(PBKDF2_DERIVATION_ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(keySpec);
byte[] keyBytes = secretKey.getEncoded();
return keyBytes;