使用Excel-Dna查找Excel公式的出现

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

到目前为止,我的最佳预感是我需要XlCall xlcFormulaFind函数,如下所述:

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

不过,我只是得到一个ExcelError返回,并不知道如何深入挖掘。

任何build议感激地收到。

您正在使用C API来调用Excel。 您可以在这里findmacrosfunction的旧帮助文件: 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.FINDmacros( 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返回一个布尔值,指示文本是否被find。 如果未find单元格,则会显示一条消息并返回false。

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