Board logo

標題: [分享] 關於VB6(or VSTO)製作Excel DLL相關技巧 [打印本頁]

作者: HUNGCHILIN    時間: 2012-2-24 23:38     標題: 關於VB6(or VSTO)製作Excel DLL相關技巧

本帖最後由 HUNGCHILIN 於 2012-2-25 00:02 編輯

最近突然覺得無聊了起來,提不起勁。可能是到了又要尋找方向突破的時候
目前應該有兩個方向去試鍊與應用
1.2010版功能應用
2.VB(or VSTO)製作Excel DLL相關技巧

本文在於試鍊與記錄VB(or VSTO)製作Excel DLL相關技巧
以下先介紹VB6製作ActiveX DLL或增益功能...等舊方法,再介紹VSTO方法
作者: HUNGCHILIN    時間: 2012-2-24 23:54

本帖最後由 HUNGCHILIN 於 2012-2-25 02:32 編輯

關於 安裝 dll


使用vbs檔安裝dll(假設安裝 ULCase.dll)
  1.在txt檔內輸入
     RegSvr32.exe ULCase.dll
  2.改檔名為.BAT,即完成安裝檔

使用vbs檔卸載dll(假設卸載 ULCase.dll)
  1.在txt檔內輸入
     RegSvr32.exe ULCase.dll / U
  2.改檔名為.BAT,即完成安裝檔

[attach]9714[/attach]
作者: HUNGCHILIN    時間: 2012-2-25 01:46

本帖最後由 HUNGCHILIN 於 2012-2-28 23:24 編輯

關於 如何製作第一個DLL檔


a.我們使用英文大小寫轉換.XLA 增益集 來作改編
[attach]9715[/attach]
excel原始程式碼
  1. Option Explicit
  2. Sub 首字大寫轉換()
  3. On Error GoTo 1
  4. Dim RANGECOUNT
  5. Dim RANGECOUNTA
  6. Application.ScreenUpdating = False
  7. For Each RANGECOUNT In Selection
  8. RANGECOUNTA = RANGECOUNTA + 1
  9. If Range(Selection.Address).Cells(RANGECOUNTA) = "" Then GoTo 2
  10. Range(Selection.Address).Cells(RANGECOUNTA) = WorksheetFunction.Proper(Range(Selection.Address).Cells(RANGECOUNTA))
  11. 2 Next
  12. 1 End Sub
  13. Sub 大寫轉換()
  14. On Error GoTo 1
  15. Dim RANGECOUNT
  16. Dim RANGECOUNTA
  17. Application.ScreenUpdating = False
  18. For Each RANGECOUNT In Selection
  19. RANGECOUNTA = RANGECOUNTA + 1
  20. If Range(Selection.Address).Cells(RANGECOUNTA) = "" Then GoTo 2
  21. Range(Selection.Address).Cells(RANGECOUNTA) = UCase(Range(Selection.Address).Cells(RANGECOUNTA))
  22. 2 Next
  23. 1 End Sub
  24. Sub 小寫轉換()
  25. On Error GoTo 1
  26. Dim RANGECOUNT
  27. Dim RANGECOUNTA
  28. Application.ScreenUpdating = False
  29. For Each RANGECOUNT In Selection
  30. RANGECOUNTA = RANGECOUNTA + 1
  31. If Range(Selection.Address).Cells(RANGECOUNTA) = "" Then GoTo 2
  32. Range(Selection.Address).Cells(RANGECOUNTA) = LCase(Range(Selection.Address).Cells(RANGECOUNTA))
  33. 2 Next
  34. 1 End Sub
複製代碼
----------------------------------------------------------------------------------------------------------------------------
b.使用VB6製作dll
  1.先COPY 英文大小寫轉換.XLA 增益集 內模組內的程式
  2.開啟vb6
[attach]9716[/attach]

  3.刪除預設的表單&新增一個class
     更改class名稱為ULCASECLASS (記住等一下要用)
     並把英文大小寫轉換.XLA 增益集 內模組內的程式貼進class
[attach]9718[/attach]
[attach]9717[/attach]

更改class內的程式碼為
  1. Option Explicit
  2. Sub ULCase()
  3. On Error GoTo 1
  4. Dim EXL As Object
  5. Set EXL = GetObject(, "Excel.Application")
  6. With EXL
  7. Dim RANGECOUNT
  8. Dim RANGECOUNTA
  9. .ScreenUpdating = False
  10. For Each RANGECOUNT In .Selection
  11. RANGECOUNTA = RANGECOUNTA + 1
  12. If .Range(.Selection.Address).Cells(RANGECOUNTA) = "" Then GoTo 2
  13. .Range(.Selection.Address).Cells(RANGECOUNTA) = .WorksheetFunction.Proper(.Range(.Selection.Address).Cells(RANGECOUNTA))
  14. 2 Next
  15. End With
  16. Set EXL = Nothing
  17. 1 End Sub
  18. Sub UCaseA()
  19. On Error GoTo 1
  20. Dim EXL As Object
  21. Set EXL = GetObject(, "Excel.Application")
  22. With EXL
  23. Dim RANGECOUNT
  24. Dim RANGECOUNTA
  25. .ScreenUpdating = False
  26. For Each RANGECOUNT In .Selection
  27. RANGECOUNTA = RANGECOUNTA + 1
  28. If .Range(.Selection.Address).Cells(RANGECOUNTA) = "" Then GoTo 2
  29. .Range(.Selection.Address).Cells(RANGECOUNTA) = UCase(.Range(.Selection.Address).Cells(RANGECOUNTA))
  30. 2 Next
  31. End With
  32. Set EXL = Nothing
  33. 1 End Sub
  34. Sub LCaseA()
  35. On Error GoTo 1
  36. Dim EXL As Object
  37. Set EXL = GetObject(, "Excel.Application")
  38. With EXL
  39. Dim RANGECOUNT
  40. Dim RANGECOUNTA
  41. .ScreenUpdating = False
  42. For Each RANGECOUNT In .Selection
  43. RANGECOUNTA = RANGECOUNTA + 1
  44. If .Range(.Selection.Address).Cells(RANGECOUNTA) = "" Then GoTo 2
  45. .Range(.Selection.Address).Cells(RANGECOUNTA) = LCase(.Range(.Selection.Address).Cells(RANGECOUNTA))
  46. 2 Next
  47. End With
  48. Set EXL = Nothing
  49. 1 End Sub
複製代碼
4.點設計師中的Connect如圖,進入後更改應用程式為excel與應用程式版本假設為9.0,設定載入行為為None
[attach]9719[/attach]

5.點設計師中的Connect按右鍵選檢視程式碼刪除裡面所有程式
[attach]9720[/attach]

6.到專案設定屬性如下圖(請記得屬性描述)
[attach]9721[/attach]

7.儲存專案如附檔,裡面有一些暫存檔可以不用理會
[attach]9722[/attach]

8.製成DLL檔 如圖 (如果程式有問題VB會偵錯)
[attach]9723[/attach]
成品:[attach]9724[/attach]

9.安裝DLL檔,請下載第二帖 到DLL同資料夾 並按"安裝BAT檔"

10.Excel vba如何使用DLL內的程式
需要在Excel模組內輸入下列程式
  1. Public Sub aa()
  2. Dim XLSULCASE As New ULCASECLASS
  3. XLSULCASE.ULCase
  4. End Sub

  5. Public Sub bb()
  6. Dim XLSULCASE As New ULCASECLASS
  7. XLSULCASE.UCaseA
  8. End Sub

  9. Public Sub cc()
  10. Dim XLSULCASE As New ULCASECLASS
  11. XLSULCASE.LCaseA
  12. End Sub
複製代碼
附檔:[attach]9800[/attach]
使用上述10個小步驟即可完成製作與使用DLL程式

作者: sklo    時間: 2012-4-9 06:41

你好,先謝謝大大分享

我是VB6新手,嘗試照著大大的步驟做封裝,但去到以下步驟就不懂了︰

以下是我開啟VB6後的情況,找不到「設計師」(如大大的圖),請問怎樣做才看到「設計師」一項呢?謝謝賜教!

[attach]10356[/attach]

大大的圖片︰

作者: HUNGCHILIN    時間: 2012-4-9 22:16

看到b 2步驟
有選 activex dll
作者: sklo    時間: 2012-4-10 00:01

看到b 2步驟
有選 activex dll
HUNGCHILIN 發表於 2012-4-9 22:16



    已選了 Activex Dll,選了後只出現我上一貼附圖效果。

另外,我的電腦是用WINDOW 7,網上睇資料,好像說VB6用在WINDOW7上會出問題,是否真的這樣?

謝謝
作者: Scott090    時間: 2013-3-22 23:56

參與 6# sklo


    在專案名稱 Project1 按右鍵,選擇加入 ADDIN CLASS 即可以有 設計師 AddInDessigner1;把它的名稱改為 Connect;只是表格中的 "應用程式(A)" 只能有 Default 值 "Visual Basic"; "應用程式版本" 也是 Default 值 "Visual Basic 6.0" ;所以玩不下去。
有請大師指點迷津。
作者: Scott090    時間: 2013-4-5 10:49

使用 VB6.0 或 2008製作 .dll 可以被 x86 EXCEL2010使用; 但是  x64 EXCEL 2010 卻不能用 ,錯誤429!! 不知為什麼。 裡面沒有明顯的 Declare 及 Long 的東東, 2008應是 x64版本。
爬文中發現有人主張用 2008做 Automation 來驅動 EXCEL;這個本末易位不是想要的東東
作者: 2lg    時間: 2013-9-13 11:50

真的不枉我来注册这个坛子。
作者: Scott090    時間: 2013-11-25 17:08

回復 5# HUNGCHILIN

有請 大師
    在不同的電腦使用VB6.0 做 Dll,發現 AddInDesigner 的視窗內: 應用程式(A),應用程式版本(V)  可以做選擇
而之前在另一電腦卻不能 !!! 是註冊表的問題還是 ???

謝謝先
作者: opelwang    時間: 2014-3-6 12:24

跟暍恛,有一方法,用VSTO制作DLL。
作者: Scott090    時間: 2014-3-18 10:15

本帖最後由 Scott090 於 2014-3-18 10:19 編輯

回復 10# Scott090


    正在研讀    使用 Excel 的逐步解說

http://msdn.microsoft.com/zh-tw/library/d7f63219
作者: Scott090    時間: 2014-3-18 10:25

回復 12# Scott090


    相關MSDN網站
Excel 文件層級自訂的程式設計入門
http://msdn.microsoft.com/zh-tw/library/f27xe9xb.aspx
作者: Scott090    時間: 2014-3-18 10:38

回復 13# Scott090


    COM addIn 應屬於   應用程式層級增益集

逐步解說:建立 Excel 的第一個應用程式層級增益集
http://msdn.microsoft.com/zh-tw/library/cc668205
作者: Scott090    時間: 2014-3-18 11:26

回復 14# Scott090


    逐步解說:使用 Visual Studio 專案 Automation 建立新的 Office 專案
http://msdn.microsoft.com/zh-tw/library/x50x16we
作者: frantz    時間: 2016-4-3 16:04

看劍到這篇正在思考能否用Visual Studio 制作EXCEL中RTD函數需要用的COM呢…
作者: shaokui123    時間: 2021-3-25 21:42

vba代码贴附进vb还需要修改一下,不爽




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)