2014-05-21 43 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