有没有一种只使用C#而不用VBA的方法来捕获Excel VSTO中的热键/快捷键?

7

我想在我们的基于文档级别的Excel VSTO插件中捕获一些关键命令。除了使用VBA并让我们的插件与VBA交互之外,似乎找不到其他方法。任何帮助或示例都将不胜感激。

我正在使用Excel 2007。


Visual Studio Office Development (VSOD) 支持团队撰写了一篇关于此的文章:http://blogs.msdn.com/b/vsod/archive/2010/04/08/using-shortcut-keys-to-call-a-function-in-an-office-add-in.aspx - Michael Zlatkovsky - Microsoft
2个回答

4
  1. 一种方法是使用Addin-Express提供的第三方解决方案。他们的产品包括将键盘快捷键添加为选项卡菜单命令属性的功能。

  2. 另一种方法是利用一些Win32 API,通常称为窗口子类化,通过低级键盘挂钩来实现。这里有一个优秀的解释,并附有代码示例。注意,唯一需要在VSTO中使这段代码“工作”的“额外”事情是将SetHook()方法移动到Startup事件,将UnhookWindowsHookEx()方法移动到Shutdown事件。

请参阅此处Stephen Toub在MSDN上的文章。

  1. 最后,使用Addin类的OnAction属性。该方法需要使用一些VBA(指指向基础.net addin的回调方法),只要您愿意在解决方案中分发一些VBA(即具有带有VBA项目的xls或doc,或者可能是本机插件),它就可以正常工作。请注意,您还需要将comvisible=true标记,并公开GetAutomationServiceObject方法,以便您的VBA可以从VBA代码中引用您的插件。

在此处查看相关帖子...


看起来Geoff Darst的链接已经失效了。有没有想到现在在哪里找到那篇文章?谢谢! - Michael Zlatkovsky - Microsoft
@MichaelZlatkovsky-Microsoft 请查看此链接:http://microsoft.public.vsnet.vstools.office.narkive.com/a5kXwA4E/capture-keystrokes-ctrl-something - John Evans Solachuk

2

你只能通过API调用Excel子类并监视关键命令来实现此操作。这篇文章比较老,但仍然适用。


链接已损坏。 - Leo Gurdian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接