上一期為大家介紹瞭如何使用VB.NET封裝VBA自定義函數並在VBE中調用,但羣裏上海小夥伴需要做到的是,如何使用VB.NET封裝後,可以直接載入到載入項中,並可以直接在Excel單元格中使用封裝後的自定義函數。

通過上圖可以看出,編寫的RatesClass.BusDayCalc已經載入到了Excel載入項裏,此時可以直接在Excel工作表中直接使用封裝好的函數sutNumber,具體使用方法如下動態圖所示:

這次封裝的函數同VB那期的教程,那如何使用VB.NET封裝如下VBA自定義函數呢?

Function sutNumber(rang1 As Range, rang2 As Range) As String
Dim strNum As String, iQty As Integer, i As Integer, m As String
批次碼
strNum = rang1.Text
進貨數量
iQty = rang2.Text
m = ""
For i = 1 To iQty
m = m & strNum & Format(i, "-000") & ","
Next i
sutNumber = Left(m, Len(m) - 1)
End Function

因為創建工程的詳細步驟上期已經為大家介紹了,今天不會那麼詳細的一步一步截圖出來,創建工程的操作詳見動態圖演示:

項目還是創建的VB.NET中的類庫(.Net Framework),此時修改Class1.vb為BusDayCalc.vb,當然大家可以根據自己的需要進行修改。為了簡便,我直接把整個代碼粘貼到BusDayCalc.vb中了,此時代碼會出現紅色下劃線的錯誤,這是由於沒有引用Excel的相關類庫,這點和上期介紹的一樣。詳細的操作大家參考動態圖進行配置即可。

除了把VBA函數的參數稍作修改,其餘的代碼未做任何修改,把Function sutNumber(rang1 As Range, rang2 As Range) As String修改為Function sutNumber(rang1 As XL.Range, rang2 As XL.Range) As String。其實代碼還需要使用ComRegisterFunctionAttribute和ComUnregisterFunctionAttribute對函數進行註冊,如下截圖所示:

有了這些代碼,就可以直接編輯項目,生成對應的dll文件了。如果需要在Excel中調試代碼,請參照如下動態圖進行操作:

細心的小夥伴一定會發現,我後來新建的項目名為RateClass,但之前創建的項目RatesClass已經註冊在Excel載入項中了,為了避免二義性,故取消了Excel對RatesClass的引用。因為代碼中已經添加了斷點,故當在Excel中調用函數sutNumber的時候就會中斷,這樣對代碼的調試太有幫助了。

既然都已經有了生成的dll,那如何發布到另一臺電腦上使用呢?總不能辛辛苦苦封裝的代碼只能在本機使用吧,那多心酸啊……這裡Steven提供一個方法,可能不是最佳方法,但能夠學習生成安裝包,具體操作如下動態圖演示:

如果大家在VS2017新建項目中找不到其他類目,請從閱讀原文下載擴展包哦。

有了生成的安裝包,需要把Release文件夾下的兩個exe文件都複製到另一臺電腦,並安裝Setup程序,如下圖所示:

其實批處理代碼裏調用了RegAsm.exe對dll進行註冊,此處的路徑為C:WINDOWSMicrosoft.NETFrameworkv4.0.30319RegAsm.exe,大家根據情況來選擇是.Net Framework 2.0還是4.0,以及是32位還是64位的dll。

大家可以發現我通過VS2017結合Microsoft.Office.Interop.Excel v15.0.0.0.0編譯的dll文件,在Office 2007上也能正常運行。

其實使用VB.NET封裝VBA代碼我也是現學現賣,介紹過程中可能會有誤,大家如果發現有錯誤或者有更好的建議,歡迎留言或加羣(QQ羣:615356012)進行交流,需要完整項目代碼的小夥伴可以在QQ羣文件中下載哦,期待你的進步^_^Written by Steven in 20180320^_^

微信公眾號:SaveUTime

SUT學習交流羣:615356012,入羣審核人:Steven

關注公眾號,提高效率,節約您的時間!


推薦閱讀:
查看原文 >>
相關文章