我尝试使用Excel.Interop和ExcelDNA创建Recordset。 我使用list函数来获取Function Wizard对话框。所以我做了什么: 1)我写入该函数的ActiveCell.FormulaR1C1值(" = MyFunction()") 2)然后尝试运行函数向导
...
cell.FormulaR1C1 = formulaStr;
if (!(bool)cell.FunctionWizard()) {
...
功能对话框启动并正常工作(我可以设置所有参数)但是当我按下确定如果至少有一个参数引用另一个工作表,则发生AccessViolation错误。(如果一切都位于一个工作表,这个方法工作正常)。 按下ok按钮后功能评估,并在FunctionWizard()方法上发生异常。 有人有类似的东西吗?
----------更新--------------
我做了简单的DNA Addin,只有一个按钮..但错误仍然重现: 1)功能:
[ExcelFunction("My Test Function")]
public static string MyTestFunction(string param1, string param2) {
return "It works!";
}
2)功能区按钮代码:
public void OnButtonPressed(IRibbonControl control) {
Application exAp = (Application)ExcelDnaUtil.Application;
Range ac = exAp.ActiveCell;
ac.FormulaR1C1 = "=MyTestFunction()";
if ((bool)ac.FunctionWizard()) {
// Do something
}
}
因此,当我从另一个工作表设置参数并在功能向导中按确定时,会发生AccessViolation。
答案 0 :(得分:0)
找到解决方案。 我用过:
Microsoft.Office.Interop.Excel.Dialog dialog = app.Dialogs.get_Item(Microsoft.Office.Interop.Excel.XlBuiltInDialog.xlDialogFunctionWizard);
if (!(bool)dialog.Show()) {
而不是:
if (!(bool)cell.FunctionWizard()) {
现在它运作正常。