【问题标题】:Excel quick access toolbar - run macro from active instead of previous workbookExcel 快速访问工具栏 - 从活动而不是以前的工作簿运行宏
【发布时间】:2015-04-29 16:14:48
【问题描述】:

我在 Excel 的快速访问工具栏中有一个自定义按钮(不是加载项,只是一个“快捷方式”按钮),用于在活动工作簿中运行宏。每天都会使用新文件名修改和保存工作簿。当链接首次在活动工作簿中创建(称为版本 1)时,宏运行良好。但是第二天(文件名现在是版本 2)单击宏按钮会打开工作簿版本 1 并运行保存在版本 1 中的宏。

有没有一种简单的方法可以断开链接并在最近的活动工作簿中运行宏?

代码是基本的 - 它只是打开一个用户表单并保存在“ThisWorkbook”中

Sub OPEN_DATA_USERFORM()

ufDATA.Show
End Sub

【问题讨论】:

  • 查看代码会有所帮助。自定义按钮是在加载项中还是在每个工作簿中?
  • 所以你的宏包括打开那个文件然后在里面运行一些命令?考虑将所有这些工作簿放在同一个文件夹中,并让 VBA 打开最近保存(= 最新)的一个。
  • 是的,快速访问功能区中的按钮运行打开用户表单的一小段代码。然后用户窗体可以运行其他宏。工作簿保存在同一个文件夹中,我只希望代码在活动工作簿中打开用户窗体,而不是在以前保存的工作簿中。
  • 您好,作为建议,您可以在工作表中放置一个按钮并将宏分配给该按钮而不是功能区吗? :)
  • 这就是我一直在做的事情,但是为了清理工作区并使代码可以从每张工作表中访问,我更喜欢从快速访问工具栏中的图标运行宏。

标签: vba excel


【解决方案1】:

我会尽力指导您完成此操作,希望对您有所帮助。

我们需要做的是从我们的“PERSONAL.XLSB”文件中调用OPEN_DATA_USERFORM()。在 VB 编辑器屏幕中,在项目资源管理器中,您会找到一个名为“PERSONAL.XLSB”的文件,您需要在其中添加一个“模块”并添加以下代码:

Sub KickOff()
    Call Application.Run(Excel.ActiveWorkbook.Name & "!OPEN_DATA_USERFORM")
End Sub

这样,我们将能够从我们的 PERSONAL.XLSB 调用 userform.show 函数,当您打开 excel 时,该函数始终在后台运行。

PS:我假设您的 OPEN_DATA_USERFORM() 已编码在您的日常工作簿中。

更新:PERSONAL.XLSB 您的文件应该在您的项目资源管理器中可见,如下所示:

如果它不存在,请记录一个虚拟宏并选择您的个人文件,如下所示,那么它应该会出现在您的项目资源管理器中的 VBA 屏幕中:

【讨论】:

  • Dubison 感谢您的建议,但我从未见过名为 PERSONAL.XLSB 的文件。我在我的 VB 编辑器中只看到 ms excel 对象、表单、模块和类模块。你能给我更多的指示吗?
  • 感谢 Dubison,但我收到运行时错误 '1004' .....该工作簿中的宏可能不可用,或者所有宏都可能被禁用。
  • 我提供的宏应该在 PERSONAL.XLSB 中,并且您的按钮应该链接到那个。在您的原始宏旁边应该在您的用户表单文件中。除此之外,您可能需要重新启动 excel,因此它可能会询问您是否要启用宏。
  • 您的方法有效,但我决定每天简单地创建一个备份,而不是另存为具有新名称的新文件。这样宏的路径就不会改变。
猜你喜欢
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多