从工具栏运行宏/从另一个宏运行一个宏

时间:2015-07-29 18:00:09

标签: vba publisher ms-publisher

我正在尝试为发布商文档开发宏。该宏在运行时会显示一个弹出窗口,允许用户选择三种类型的客户端之一,并根据选择的选项将不同的项目符号添加到文本框中。我有两个不同的问题,我怀疑这些问题来自同一个来源。第一个问题是,当单击按钮时,我无法获取用户表单上的按钮以运行不同的宏。问题二是我将我的宏添加到其中一个工具栏中,当我点击它们时没有任何反应。在这两种情况下,它都不会运行宏。我做错了什么?

UserForm1

Private Sub CommandButton1_Click()
Application.Run ("ShapeTest")
End Sub

Private Sub UserForm_Initialize()
With ListBox1
.AddItem ("Federal")
.AddItem ("State")
.AddItem ("Local")
End With
End Sub

的ThisDocument

Private Sub GenerateStatement()
UserForm1.Show
End Sub

Private Sub ShapeTest()
MsgBox ("Hello!")
Application.ActiveDocument.Pages(1).Shapes(1).TextFrame.TextRange.InsertAfter`enter code here`(Chr(13) & "My Text")
End Sub

1 个答案:

答案 0 :(得分:1)

为什么使用Application.Run("ShapeTest")而不是ShapeTest

我没有足够的信息可以100%确定,但以下情况应该有效:要从用户表单调用ShapeTest,您可以做两件事:

1)将其从ThisDocument移动到通用代码模块(编辑器中的第一个Insert/Module)。

2)消除Private前面的单词Sub ShapeTest() - 您不希望这是私有子,因为您需要代码之外的代码模块能够使用它。

在修改时:或者 - 您可以将ShapeTest()保留在ThisDocument中的位置,摆脱Private限定符,并在userform代码中引用ShapeTest as ThisDocument.ShapeTest。我更喜欢使用第一种方法,因为我倾向于在一般代码模块中保留尽可能多的代码(为事件处理程序保留ThisDocument之类的东西)但OTOH我的VBA体验主要是Excel,只有少量Word和那里可能是将代码保留在Publisher ThisDocument中的原因。我不了解Publisher,但有时我在Word中遇到的一个问题是,我有时会意外地将代码放入我希望在文档项目中使用的Normal模板中。如果Publisher中有类似的内容,您应该仔细检查您的代码所在的位置。