【问题标题】:Running Macros from Toolbar/Running one macro from another从工具栏运行宏/从另一个宏运行一个宏
【发布时间】:2015-10-20 20:53:53
【问题描述】:

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

用户窗体1

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

本文档

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

【问题讨论】:

    标签: vba publisher ms-publisher


    【解决方案1】:

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

    我没有足够的信息来 100% 确定,但以下应该可行:要使 ShapeTest 可从用户窗体调用,您需要做两件事:

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

    2) 去掉 Sub ShapeTest() 前面的 Private 字样——你不想想要这是一个私有子,因为你希望模块之外的代码能够使用它。

    编辑时:或者——您可以将ShapeTest() 保留在ThisDocument 中的位置,去掉Private 限定符,并在用户表单代码中将ShapeTest 引用为ThisDocument.ShapeTest。我更喜欢使用第一种方法,因为我倾向于在通用代码模块中保留尽可能多的代码(为事件处理程序保留 ThisDocument 之类的东西)但是我的 VBA 经验主要是 Excel 和少量 Word,可能会有将代码保留在 Publisher 中 ThisDocument 的原因。我不知道 Publisher,但我有时在 Word 中遇到的一个问题是,我有时不小心将代码放入了我想放入文档项目的 Normal 模板中。如果在 Publisher 中可能出现类似的情况,您应该仔细检查您的代码所在的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2023-03-18
      相关资源
      最近更新 更多