【问题标题】:Excel VBA - Calling a Sub int a Workbook from my Personal Macro WorkbookExcel VBA - 从我的个人宏工作簿中调用 Sub int 工作簿
【发布时间】:2020-08-17 15:05:37
【问题描述】:

我维护了一个我通过自定义工具栏使用的 Subs 个人工作簿。我正在开发一个项目,其中有一个我想从工具栏定期调用的子项目。但是我每天都会多次保存正在开发的工作簿以保持回退能力。由于工作簿名称每次都会更改,因此工具栏与过期工作簿中的 Sub 相关联。

我想在我的个人宏工作簿中保留一个子程序,它在当前打开的工作簿中调用一个子程序 - 有什么想法吗?我把它公开了,但没有这样做。我尝试传输代码,但它引用了个人宏工作簿无法访问的变量(甚至是全局变量)。

【问题讨论】:

  • 这能回答你的问题吗:stackoverflow.com/questions/28741828/…
  • 个人工作簿中的宏必须按名称引用它应该处理的工作簿。将名称更改为ActiveWorkbook,您就不需要第二个宏了。但是,引用 ActiveWorkbook 有其自身的危险。考虑在宏中构建检查,以防止它更改错误的工作簿。例如,如果名称更改仅涉及日期/时间更改,请在宏中查找核心名称。在此处发布以获取修改建议。

标签: excel vba


【解决方案1】:

请尝试下一种方法:

  1. 创建要在工作簿中调用的宏,该宏将成为活动的:
Public Sub myMacroOtherWorkbook()
   MsgBox "Hello from other workbook!"
 End Sub
  1. 从您的个人宏工作簿中调用它,方式如下:
Sub testCallMacroOtherWb()
  Application.Run ("'" & ActiveWorkbook.Name & "'!myMacroOtherWorkbook")
End Sub

版本2,如果需要传递参数:

  1. 将上面的Sub转化为:
Public Sub myMacroOtherWorkbook(Optional strCall As String)
   MsgBox "I will bring a " & IIf(strCall = "", "", strCall) & " horse."
End Sub
  1. 这样称呼它:
Sub testCallMacroOtherWb()
  Application.Run "'" & ActiveWorkbook.Name & "'!myMacroOtherWorkbook", "black"
End Sub

注意:第一次调用仍然有效,但马将没有颜色...... :)

【讨论】:

  • @Ken Pascoe:您有时间检查上述建议吗?如果是,他们有问题吗?
猜你喜欢
  • 2023-03-26
  • 2019-02-17
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多