2014-10-20 69 views
0

我有用C#編寫的GUI。這是一個交互式按鈕和文本控制寄存器映射的網格。我想爲該GUI創建一個用於Excel vba的API。我一直無法找到任何有關如何創建此類事物的示例或文檔,但我之前使用過其他公司的對象庫。爲Excel vba創建對象庫

在我試圖創建這個,我遇到了一些問題,即它只適用於我的電腦。另外,如果我移動到我的電腦上的另一個文件夾,它也會中斷。

Excel的VBA代碼:

Sub Test() 
    Dim impclass As New ZZVISIBLE_FROM_EXCEL_CLASS 
    MsgBox impclass.DotNetMethod_SQR(5) 
End Sub 

C#庫類代碼:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace ZZVISIBLE_FROM_EXCEL_LIBRARY 
{ 
    public class ZZVISIBLE_FROM_EXCEL_CLASS 
    { 
     public Double DotNetMethod_SQR(Double input) 
     { 
      return input * input; 
     } 
    } 
} 

此基礎示例使用C#庫類方一些和Excel VBA來選擇數字5。這是一個後面我想做的事情基本框架如:

grid.writecell(22,1001)

grid.getcell(22)

grid.resetall()

grid.loadfile("C:\griddata\config_default")

enter image description here

做出這些對象庫或一些參考他們甚至被稱爲是最有幫助的是什麼!在C#中用谷歌搜索「自定義excel vba引用」到目前爲止沒有任何用處,所以我決定在這裏發佈求助。

另外,我很早就在項目中說「你做錯了,做這個」類型的答案也很受歡迎!

+0

你能不能做到在C#同樣的事情存在..? – MethodMan 2014-10-20 22:08:35

+0

這是一個很棒的評論!不幸的是,我這樣做的原因是保持與用Excel VBA編寫的代碼的兼容性。 – SwimBikeRun 2014-10-20 22:13:22

回答

1

所有你需要知道你正在使用的版本DOTNET所以您使用的第一: C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ regasm.exe 或C:\ WINDOWS \微軟.NET \ Framework \ v4.0.30319 \ RegAsm.exe

其次,您需要知道您是否要將dll註冊爲32位或64位,因此對於32位使用相同的以前路徑,或者只是使用Framework64而不是Framework在64位的情況下

一旦完成,您可以輕鬆地在您的vba腳本中添加對此彙編的引用,如下所示: enter image description here

添加一次,你可以實例化任何類的任何intance使用`Microsoft.Interop.Excel`你試圖谷歌在使用互操作的例子在DLL

2

你有兩個選擇:

1)創建一個裝配,並使用regasm

見文章在CodeProject

http://www.codeproject.com/Articles/555660/Extend-your-VBA-code-with-Csharp-VB-NET-or-Cpluspl

2)使COM可見爲了使C#裝配對Excel可見,您必須使其可見並將ReferenceAssemblyFromVbaProject設置爲true。

請參閱下面的MSDN文章瞭解更多信息:

http://msdn.microsoft.com/en-us/library/bb608604.aspx

謝謝,凱文

+0

很好的建議,但它沒有解決部署問題。只有我的電腦運行它。我應該如何將它部署爲其他人可以使用的工具? – SwimBikeRun 2014-10-20 23:31:14

+0

@SwimBikeRun答案就在那裏 - 使用'regasm'在其他機器上註冊'.dll'和'.tlb'。在部署之前,確保你的目標是正確的平臺。 – 2014-10-21 07:13:55

+0

由於vba4all說你可以使用regasm,你也可以編寫一個.NET安裝程序http://stackoverflow.com/questions/2378730/register-a-c-vb-net-com-dll-programatically你將需要管理員權限。 – Kevin 2014-10-21 11:33:24

0

你可以用你的圖書館在Excel-DNA加載項。 (Excel-DNA是我爲了將.NET與Excel集成而開發的免費庫)。這可以緩解COM的註冊問題(允許您在不需要管理員權限的情況下部署COM對象模式)。

如果您想將某些功能作爲用戶定義的函數公開,您可以從Excel中的工作表調用,添加功能區或類似的東西,也會有所幫助。

對於使用Excel-DNA,以暴露一個對象模型來VBA,我建議這些發貼Mikael Katajamäki作爲起點:

對於一般的Excel-DNA支持我建議你使用Excel-DNA Google group