2015-09-30 53 views
-2

我試圖使用Excel.Interop和ExcelDNA創建Recordset。 我使用列表函數來獲取函數嚮導對話框。所以,我做什麼: 1)我寫的那個函數(「= MyFunction的()」) 2)的ActiveCell.FormulaR1C1值,然後試圖運行函數嚮導Excel.Interop:AccessViolation例外時,其中一個參數referes到另一個工作表

  ... 
      cell.FormulaR1C1 = formulaStr; 
      if (!(bool)cell.FunctionWizard()) { 
      ... 

函數對話框啓動並正常工作(我可以設置所有參數),但是當我按OK時,如果至少有一個參數指向另一個工作表(如果一切位於一個工作表,此方法工作正常),則會發生AccessViolation錯誤。 按下ok按鈕後函數會計算,並且FunctionWizard()方法發生異常。 有沒有人有類似的東西?

----------更新--------------

我做了簡單的DNA加載項,只用1個按鈕..和錯誤仍然再現: 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 
     } 
    } 

因此,當我設定從另一片,然後按OK在嚮導功能參數,AccessViolation發生。

+1

你能發佈更多相關的代碼嗎?聽起來像有一個不存在的工作表的參考。 – SpaceSteak

+0

功能區按鈕執行代碼,我寫.. MyFunction存儲單元格引用數組並返回空值(我試圖返回字符串和null也),MyFunction工作正常,但然後發生異常.. – Anton

+0

我也試圖簡單地返回一些函數中的字符串沒有評估某些東西..結果是一樣的。 – Anton

回答

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()) { 

而現在它工作正常。

+0

如果您首先分享了代碼中的_really_ problematic部分('FunctionWizard'),那麼我們可能會更有幫助 - 而且您可能實際上已經學會了「我會以其他方式完成」之類的事情。只是在說... – LocEngineer

相關問題