[当我在C#Visual Studio 2008中开发此应用程序时,我问了同样的问题(实际上设法在MS论坛上找到了答案,为此我应该得到某种奖励)。 MS的答案是,将键盘快捷方式设置为您自己的方法的唯一方法是编写一个宏,该宏调用该方法(显然是通过COM),然后设置快捷方式以调用该宏。
这真的不是我想听到的答案。 VSTO使得可以很好地利用功能区等来构建一个非常好的应用程序,但是随后您就不得不麻烦通过COM公开整个内容,并通过宏在其中构建另一个接口。除了浪费时间之外,这完全避开了MS为支持VSTO加载项而内置的所有安全性。
我的问题是:这真的有必要(整个COM /宏),还是可以为我的功能区项分配键盘快捷键? Word 2007? Word 2010?
谢谢
为时已晚,但值得分享。
我在项目中使用了键盘快捷键。基本上,此快捷键应带有一个称为SignOff的WPF表单。通过单击功能区选项卡中的按钮或使用键盘快捷键(Ctrl + Shift + S),可以显示此WPF表单。
我需要在四个地方编写代码。
单击事件时调用功能区按钮的操作方法。
public void btnInsertSignoff_Click(IRibbonControl control)
{
InsertSignoff();//This method displays the sign off form
}
以下代码在Addin Startup / Document Change事件中将键盘快捷键与VBA代码绑定在一起
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Globals.ThisAddIn.Application.KeyBindings.Add(WdKeyCategory.wdKeyCategoryCommand, "InsertSignOff ", Globals.ThisAddIn.Application.BuildKeyCode(WdKey.wdKeyControl, WdKey.wdKeyShift, WdKey. wdKeyS));
}
此链接显示了如何使用键盘快捷方式调用VBA代码。http://www.wordbanter.com/showthread.php?t=31813
我遵循了这个示例,但是在VSTO Addin Startup事件中代替了VBA,但是第二个参数“ InsertSignOff”是步骤4中的VBA方法。
编写另一种方法称为InsertSignOff(在将VSTO方法暴露给VBA之后)。
[ComVisible(true)]
public interface IAddInAdapter
{
void InsertSignOff ();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class AddinAdapter : IAddInAdapter
{
public void InsertSignOff()
{
InsertSignoff();//This method displays the sign off form
}
}
此链接说明了如何将VSTO代码公开给VBAhttp://msdn.microsoft.com/en-us/library/bb608604.aspx
在用户模板位置“ C:\ Users \\ AppData \ Roaming \ Microsoft \ Templates”中创建了一个.dotm文件,其中包含以下VBA代码
Sub InsertSignOff ()
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns("Wordaddin.AddinAdapter")
Set automationObject = addIn.Object
automationObject.InsertSignOff
End Sub
希望这对某些人有帮助。