【问题标题】:How do I hotkey current sheet's VBA code?如何热键当前工作表的 VBA 代码?
【发布时间】:2015-08-17 20:36:29
【问题描述】:

我遇到了Worksheet_SelectionChange(ByVal Target As Range) 每次点击某些东西时触发的问题,这是我不想要的,因为这意味着我每次点击实际工作表时都必须等待。我将代码更改为Worksheet_Open,但这意味着我必须在想要运行代码时单击“运行”按钮。

因此,我正在寻找一种仅在查看工作表时(而不是在 VBA 编辑器中)运行当前工作表的 VBA 代码的方法。理想情况下,我可以使用Application.OnKey 将其分配给热键,但我不知道如何引用工作表的代码本身。我发现的唯一解决方案是指外部宏,这没有帮助,因为我只想使用工作表中已经存在的代码,因为我为工作簿中的每个工作表使用不同的宏。

【问题讨论】:

  • 如果您不希望它响应事件,那么为什么要将它放在工作表的模块中。将其移至标准模块并分配热键。这行得通吗?
  • 或者在电子表格中添加一个按钮并将宏附加到按钮上。这对我来说是迄今为止最简单的,因为我总是记错我分配给哪个宏的热键:)
  • @PeterT 你在说命令按钮吗?那会奏效。但这部分只是我学习 VBA 的创意,命令按钮有点太容易了,虽然绝对有效。此外,因为在这种情况下,我有 3 个不同的工作表,这意味着添加 3 个按钮,然后在我将 excel 文件发送给收件人之前删除它们。仍然没什么大不了的,但我正在寻找一种完全自动化的方法。
  • 是的,一个表单控件按钮(如果您愿意,可以使用 ActiveX 按钮,但表单控件版本也可以正常工作)。

标签: vba excel excel-2013


【解决方案1】:

在您为其设置热键的模块中创建一个宏,该宏将调用您需要的那个:
CallByName ActiveSheet, ActiveSheet.Name & "Macro", VbMethod

所以你需要在每个工作表中以 SheetNameMacro 的格式命名宏。

更多解释:Trying to call a Sub with a String - VBA

更新

如果您的工作表名称包含空格,请使用:
CallByName ActiveSheet, Replace(ActiveSheet.Name," ","_") & "Macro", VbMethod
当然也可以替换工作表中的空格(例如,如果您的工作表名为“要删除的列表”而不是宏名称应该是 list_to_deleteMacro。

【讨论】:

  • 因此,如果工作表名为“Link to Delete”,那么我应该将宏命名为“Links To DeleteMacro”吗?我的一张工作表名为“From SuccessFactors”,因此我将宏命名为“From SuccessFactorsMacro”。当我使用模块的热键时,我得到:“运行时错误'40036':应用程序定义或对象定义错误”
  • 工作表名称中的空格肯定会出现问题,尝试摆脱它们,或者使用更新的代码
  • 好吧,看来空格是问题所在,我看不到在宏名称中包含空格的方法,所以我将其更改为下划线。你知道一种方法来暂停它运行的宏吗? VBA 编辑器表明它正在连续运行。
  • 按 ctrl+break 停止
猜你喜欢
  • 2019-09-09
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多