使用Excel-Dna我想在Excel實例中搜索所有打開的工作簿中特定公式的出現次數。使用Excel-Dna查找Excel公式的出現
到目前爲止我最好的直覺是,我需要XLCALL的xlcFormulaFind功能記錄here:
XlCall.TryExcel(XlCall.xlcFormulaFind, out result, "MyFunc", 1, 2, 1);
不過,我只是得到一個ExcelError回來了,我不知道如何進行深入分析。
任何建議感激地收到。
使用Excel-Dna我想在Excel實例中搜索所有打開的工作簿中特定公式的出現次數。使用Excel-Dna查找Excel公式的出現
到目前爲止我最好的直覺是,我需要XLCALL的xlcFormulaFind功能記錄here:
XlCall.TryExcel(XlCall.xlcFormulaFind, out result, "MyFunc", 1, 2, 1);
不過,我只是得到一個ExcelError回來了,我不知道如何進行深入分析。
任何建議感激地收到。
您正在使用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。
嗨,Govert,感謝您的建議,並且感謝Excel-DNA--它是一款非常棒的軟件。我從來沒有真正做到這一點,但是我對時間非常緊張,所以沒有探索太多,希望遲早我會回來。最後,我只是改變了我的工具的工作流程以刪除要求。 – MarkNS