繁体   English   中英

您可以使用 xlcOnKey 和 ExcelDNA 在另一个代码文件中指定方法吗

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM