【问题标题】:Reset Macro OnKey-Assignment to Default does not work for Recorded Macros将宏 OnKey-Assignment 重置为默认值不适用于录制的宏
【发布时间】:2020-03-03 04:52:08
【问题描述】:

几天前在 Excel 2016 中,我错误地在 Macro-Recorder 窗口中为 Ctrl+y 分配了一个宏。

现在,我想将 Ctrl+y 重置为其默认行为。

为此,我找到了以下代码:

Sub keys_deleteHotKeys()
   ' https://www.excelcampus.com/vba/keyboard-shortcut-run-macro/
    Application.OnKey "^y", ""
    Call Application.OnKey("^y")
End Sub

很遗憾,上面的 Sub 没有效果。

与 VBA Application.OnKey 分配相比,在“宏记录器”窗口中处理宏到键分配时,excel 是否遵循不同的方式?

【问题讨论】:

  • 那么您是否已经删除了宏的快捷方式?

标签: excel vba


【解决方案1】:

宏记录器始终为分配的热键包含一个隐藏的成员属性,IDE 中没有任何东西可以修改或以其他方式操作它。您可以导出代码文件,对其进行编辑(删除隐藏的 Attribute 行),然后将其重新导入到您的 VBA 项目中......但这很让人头疼。

获取Rubberduck(我管理的免费、开源的VBIDE插件项目),然后你就可以这样做了:

'@ExcelHotkey("y")
Public Sub MyAwesomeMacro()
    'do stuff...
End Sub

然后可以将注释/注释转换为 Excel 在录制宏和分配热键时使用的相同隐藏成员属性(通过静态代码分析;有关所有详细信息,请参阅 this post)。

小写字母“y”是快捷键 Ctrl+y 的组成部分。如果您希望热键为 Ctrl+Shift+y,只需将其设为大写“Y”:

'@ExcelHotkey("Y")
Public Sub MyAwesomeMacro()
    'do stuff...
End Sub

这种方法的优点很多:

  • 没有隐藏的隐藏成员属性可供操作。
  • 无需导出/编辑/导入任何内容。
  • 隐蔽的隐藏成员属性已浮出水面/记录在案。
  • 不需要任何Application.OnKey hack。
  • 只要属性和注释不一致,您就会得到检查结果,并且只需单击一下即可同步值。

如果您只想删除热键属性,那么只需运行代码检查即可; Rubberduck 会在没有相应注解的情况下告诉您隐藏属性,然后您可以决定是删除该属性还是添加相应的注解。


注意:该功能可以很好地满足 OP 的需求(删除隐藏属性),但是regression bug was filed,因为添加隐藏属性是在 v2.4.1.5170 中损坏。

【讨论】:

    【解决方案2】:

    在开发者功能区选项卡的宏列表菜单中,选择相应的宏,然后选择Option... 并删除您设置的快捷方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      相关资源
      最近更新 更多