[英]can you specify a method in another code file using xlcOnKey and ExcelDNA
我可以在相同的代码文件/命名空间中成功地将方法注册到 excel 击键,如下所示:
XlCall.Excel(XlCall.xlcOnKey, "^t", "TESTMETHOD");
我可以以某种方式在另一个文件的不同静态类中指定一个方法吗? 例如:
XlCall.Excel(XlCall.xlcOnKey, "c", "utilClass.TESTMETHOD");
当我尝试此 Excel 时,它告诉我“无法运行宏 utilClass.TESTMETHOD。该宏在此工作簿中可能不可用,或者所有宏都可能被禁用。
是的你可以。 使用 Excel-DNA 的默认注册机制(这似乎是您的情况)时,类的名称不相关。
默认情况下,Excel-DNA 会扫描您的加载项程序集以查找公共类中的静态方法,并自动将它们注册为与方法名称同名的命令或函数,而不考虑该方法所属的类的名称。
这意味着当您将TESTMETHOD
移至名为utilClass
的类时,它仍将在 Excel 中注册为TESTMETHOD
,因此,您的注册代码保持不变,即使该方法位于不同的类上:
XlCall.Excel(XlCall.xlcOnKey, "^t", "TESTMETHOD");
如果您想为您的命令定义一个自定义名称,您可以使用添加ExcelCommand
属性并设置您想要的名称(下面的示例),或者如果您想更好地控制,您可以使用Excel-DNA 自定义注册库登记。
public static class UtilClass
{
[ExcelCommand(Name = "UtilClass.TestMethod")]
public static void TestMethod()
{
// ...
}
}
public class MyAddIn : IExcelAddIn
{
public void AutoOpen()
{
XlCall.Excel(XlCall.xlcOnKey, "^t", "UtilClass.TestMethod");
}
// ...
}
值得一提的是,您可以直接在ExcelCommand
属性中轻松定义快捷方式,而完全无需调用XlCall.Excel
来注册快捷方式......例如
public static class UtilClass
{
[ExcelCommand(Name = "UtilClass.TestMethod", ShortCut = "^t")]
public static void TestMethod()
{
// ...
}
}
以上将自动注册一个名为UtilClass.TestMethod
的命令,该命令可以通过CTRL + T触发。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.