如何在 MS Word 2007 中使用 VBA 创建键盘挂钩?

如何在 MS Word 2007 中使用 VBA 创建键盘挂钩?

如何创建和使用键盘挂钩来触发 VBA 宏?

这与“当有人输入时如何触发宏”或“MS Word 的 VBA 中是否有输入事件”的问题有关。答案通常是您需要创建一个 winAPI 键盘钩子并使用它来触发宏 - 但我找到的所有答案都没有告诉我们如何创建钩子,而且我找到的所有示例代码都不起作用。我在这个主题上找到的大多数谷歌搜索结果都导致 404 或文章被移动。

编辑:最终目标是能够在文档主体发生更改时触发事件,因此在任何时候运行一个函数单身的按下字母键,并使用数字键 0 至 9 作为热键无需使用 Ctrl、Alt 或任何修饰键

有谁对 VBA 键盘钩子有更好的了解,可以发一个由任意按键触发的宏函数示例吗?或者按特定键触发的宏函数示例?

答案1

这是在 2010 年完成的,但 2007 年应该类似。

您可以创建宏,然后转到选项 - 自定义 - 键盘快捷键:自定义

在此处输入图片描述

并通过那里进行分配。

在此处输入图片描述


或者,由于这无法通过 VBA 实现,您需要录制分配给快捷方式的宏,然后更改代码。

在开发人员选项卡中点击“记录宏”并将宏分配给键盘 -

在此处输入图片描述

然后,分配您的快捷方式 -

在此处输入图片描述

停止录制后,您可以进入 VBE 并将其更改为所需的内容。代码中不会显示它有键盘快捷键。

答案2

简短回答:不要尝试在 VBA 中执行此操作。找到另一种将 0-9 映射到 Word 可以理解的快捷键的方法。Microsoft IntelliType 驱动程序可以做到这一点,AutoHotKey 也可以。两者都能够仅为 Word 执行此映射,而不会影响其他应用程序。AutoHotKey 的功能更强大,可以轻松地将单个键映射到许多击键中。

长答案:即使在 VB.NET 和 C# 等语言中,键盘钩子也很难正确使用,因为它们不是 .NET 的一部分。例如,如果您钩住键盘队列,但在完成时无法解钩,就会发生非常糟糕的事情(例如使 Visual Studio 崩溃)。C++ 也好不到哪里去,但 C++ 程序员习惯于在无情的环境中工作。(IWO 一切都会一直崩溃。)

我建议看看 AutoHotKey。优点是键盘宏是它的强项。缺点是语法不一致。断断续续用了好多年后,我不得不看看我的备忘单。

相关内容