2015-02-06 66 views
2

編輯:真正的解決方案,我想做什麼可以在這篇文章here找到。我只是想公開一些編譯好的函數。使用Excel DNA nuget包證明這非常簡單。您只需添加一個類庫,添加nuget包,然後複製自述文件中找到的代碼。點擊F5,它會在加載項已經加載的情況下啓動excel。如果你想讓你的函數持久化,只需要通過「開發人員」功能區部分手動將加載項添加到excel文件。Excel自動化插件 - 功能不工作

原始發佈: 我按照this microsoft post的說明,如何創建一個自動加載項。代碼編譯得很好,我可以從Excel中訪問函數。但是這些功能不起作用。當我嘗試爲單元格分配函數調用的結果時,我幾乎總是得到#value或#ref錯誤。更具體地說:

以下由Microsoft提供的功能不起作用。它在我嘗試使用它的單元格中顯示#value錯誤。我選擇使用鼠標隨機單元格範圍作爲函數的參數。

Public Function NumberOfCells(ByVal range As Object) As Double 
    Dim r As Excel.Range = TryCast(range, Excel.Range) 
    Return CDbl(r.get_Cells.get_Count) 
End Function 

我創建的以下函數不起作用。我收到#ref錯誤。我通過傳遞直接整數(Add1(1,2))或包含數字的單元格來調用它。

Public Function Add1(ByVal i1 As Integer, ByVal i2 As Integer) As Integer 
    return i1+i2 
End Function 

,我創作的作品下面的函數(?!?):

Public Function Add1(ByVal i1 As Integer, ByVal i2 As Integer) As Integer 
    return 222 
End Function 

我很有經驗,在C#中,但不是在所有在vb.net,但這個插件,我需要使用vb.net。我懷疑這裏有一些簡單的東西,但我不知道它是什麼。微軟提供的代碼不起作用也很奇怪。

編輯:我也複製粘貼呈現here功能,我在Excel中得到相同的#值錯誤。我從一開始就沒有遵循這篇文章的教程,但我會在白天進行。

編輯2:我發現,只要在函數名稱中添加一個數字,由於某些原因,Microsoft的代碼無法工作。如果我將上面的示例代碼中的Add1重命名爲Addqweqew,它將起作用!

+0

當你說「不工作「你爲每個案件專門做了什麼錯誤?你用什麼數據來測試這些功能? – chancea 2015-02-06 22:55:24

+0

相應編輯帖子! – gerodim 2015-02-06 23:03:00

回答

1

MSDN參考:http://blogs.msdn.com/b/andreww/archive/2008/01/23/managed-automation-add-ins.aspx

它有一個區域設置ID(LCID)的問題做。當在混合文化環境中開發Excel解決方案時,這是一個已知問題 。有關更多 信息,請參閱此處:http://support.microsoft.com/kb/246501/

VSTO通過其LCID代理解決了這個問題。雖然你只能使用 這與VSTO解決方案,它值得一讀的文件,所以你可以 理解這個問題: http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033proxy.aspxhttp://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033attribute.aspx

我得到了同樣的問題#VALUE結果,我逛了一下打亂,得到了這個工作(顯然它可以被清除了 - 但是這個代碼肯定對我的作品,同時保持我的電腦設置爲我的澳大利亞語言環境ID。我不知道你生活在世界的哪個部分,但我猜不是美國作爲這就是它的工作原理是默認的語言環境)

Public Function AddNumbers1(ByVal num1 As Double, _ 
          ByVal num2 As Double) As Double 

    Dim oldCI As CultureInfo = Thread.CurrentThread.CurrentCulture 
    Dim english As System.Globalization.CultureInfo = System.Globalization.CultureInfo.GetCultureInfo("en-US") 
    System.Threading.Thread.CurrentThread.CurrentCulture = english 
    System.Threading.Thread.CurrentThread.CurrentUICulture = english 

    Dim valresult As Double = num1 + num2 

    Thread.CurrentThread.CurrentCulture = oldCI 
    Return valresult 
End Function 

相關問題:https://social.msdn.microsoft.com/Forums/en-US/dafe71c5-d390-44bc-b4d3-b133444a02fe/excel-automation-addin-udf-returns-error-on-different-regional-settings?forum=vsto