2014-05-21 42 views
0

使用Excel-Dna我想在Excel实例中搜索所有打开的工作簿中特定公式的出现次数。使用Excel-Dna查找Excel公式的出现

到目前为止我最好的直觉是,我需要XLCALL的xlcFormulaFind功能记录here

XlCall.TryExcel(XlCall.xlcFormulaFind, out result, "MyFunc", 1, 2, 1); 

不过,我只是得到一个ExcelError回来了,我不知道如何进行深入分析。

任何建议感激地收到。

回答

1

您正在使用C API来调用Excel。您可以在这里找到宏特征的旧帮助文件:http://www.xceed.be/Blog.nsf/dx/excel-macro-function-help-file-for-windows-7

C API的替代方法是使用COM自动化接口。从Excel-DNA加载项中,通过调用ExcelDnaUtil.Application可以获得根应用程序对象。然后API的其余部分与VBA完全一样。

它看起来像你使用FORMULA.FIND宏(xlcFormulaFind)正确,当我试图在这个Excel-DNA命令它工作得很好:

[ExcelCommand(ShortCut = "^G")] // Ctrl+Shift+G 
public static void FindMyFunc() 
{ 
    object found = XlCall.Excel(XlCall.xlcFormulaFind, "MyFunc", 1, 2, 1); 
    if ((bool)found) 
    { 
     XlCall.Excel(XlCall.xlcAlert, "Found It!"); 
    } 
    // else it would have shown a message already 
} 

注意xlcFormulaFind返回一个布尔值指示是否文本被发现或没有。如果未找到单元格,则会显示一条消息并返回false。

您不能使用工作表函数(UDF)中的函数。如果UDF未标记为IsMacroType=true,则拨打XlCall.Excel将失败(如果使用XlCall.TryExcel,则投掷XlCallException或返回失败码)。如果您将该函数标记为IsMacrotype=true宏调用成功,但始终返回false。

+0

嗨,Govert,感谢您的建议,并且感谢Excel-DNA--它是一款非常棒的软件。我从来没有真正做到这一点,但是我对时间非常紧张,所以没有探索太多,希望迟早我会回来。最后,我只是改变了我的工具的工作流程以删除要求。 – MarkNS