1. 程式人生 > >將VBA操作封裝為DLL元件並在EXCEL中呼叫

將VBA操作封裝為DLL元件並在EXCEL中呼叫

使用程式: 1、Microsoft Office Excel 2003 2、Microsoft Visual Basic 6.0 案例:在工作表的C1單元格得出A1單元格+B1單元格的值。 設計的VBA程式碼: Sub Test()     On Error Resume Next     Range("C1") = Cells(1, 1) + Cells(1, 2) End Sub 第一部分、使用VB6.0製作DLL檔案 一、 啟動VB6.0,新建一個ActiveX DLL工程:   二、 引用:在VB中對Excel的引用    不同版本的EXCEL在“引用”窗口裡顯示的版本號也不同:
EXCEL2000(Microsoft Office 9.0) EXCEL2002(Microsoft Office 10.0),即ExcelXP EXCEL2003(Microsoft Office 11.0) EXCEL2007(Microsoft Office 12.0) EXCEL2010(Microsoft Office 14.0) EXCEL2013(Microsoft Office 15.0) 三、 修改ActiveX DLL的工程名稱和類模組名稱   四、編寫程式碼: 在程式碼視窗輸入程式碼,過程名稱為Test: Sub Test()     On Error Resume Next     Dim VBt, YB    '定義變數VBt
    Set VBt = GetObject(, "Excel.Application")    '使VBt表示為EXCEL物件     Set YB = VBt.ActiveSheet    '使YB表示為EXCEL的當前工作表     '注意要在物件前加上YB變數以表示是EXCEL當前工作表的物件     YB. Range("C1")  = YB.Cells(1, 1).Value + YB.Cells(1, 2).Value End Sub 五、設定工程屬性 (為使開發的程式更規範,可以對工程屬性加以描述【非必要設定,可以省略】):   六、儲存工程、測試、生成DLL檔案:
1、儲存工程:儲存本工程以作為將來修改程式碼和升級程式的需要; 2、測試工程:執行快捷工具欄上的“啟動”按鈕,檢查是否存在錯誤; 3、生成DLL檔案:製作DLL檔案。 第二部分、呼叫DLL檔案 一、在VBE中呼叫DLL檔案 呼叫DLL檔案,要分兩步走:先註冊DLL,再引用DLL。 1、 註冊DLL(使之放在可引用的列表上)
註冊DLL也可以使用程式碼來做,但那樣比較複雜,也存在很多問題,建議一般使用手工來註冊。
(這裡應該先設計好DLL檔案放在硬碟的位置,因為後面引用DLL檔案的程式碼也應該是指向這個位置的。)   先開啟EXCEL,再開啟“Visual Basic 編輯器”   2、引用DLL(這樣每次開啟開啟檔案時,就不必再去那個引用列表裡打個勾了) ①DLL檔案放在與EXCEL檔案同一個資料夾內 在ThisWorkbook中新增如下程式碼: Private Sub Workbook_Open() '開啟檔案時載入要引用的DLL檔案 shell "Regsvr32 /s " & Chr(34) & ThisWorkBook.path & "\VBADLL.dll"& Chr(34) End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean)'關閉檔案之前解除安裝引用的DLL檔案 shell "Regsvr32 /s /u " & Chr(34) & ThisWorkBook.path & "\VBADLL.dll"& Chr(34) End Sub '/s引數是防止出現確認視窗;/u引數為取消引用。 ②DLL檔案放在固定資料夾內,如果你有多個XLS文件需要使用到同一個DLL檔案,但這些XLS文件又不可能都與DLL檔案放在同一個資料夾,則需要將DLL檔案放置到一個固定資料夾,這樣,只需要將上面的程式碼 ThisWorkBook.path & "\VBADLL.dll" 換成一個固定位置即可。 注意:有時間可能出現某些錯誤,如提示“變數型別未定義”等,可能是引用後改變了檔案的位置或改變了檔案的名稱,即使再重新再改回來也可能會出現這些問題,所以,在正確註冊及引用以後,最好不要再去修改這個DLL檔案。如果出現問題,重新註冊一次,保證註冊的DLL檔案的位置正確即可。 二、新建一個模組,輸入呼叫DLL檔案程式的過程: Sub DLLtest()     Dim ABC As New VBAtest      '定義ABC為新類,即為DLL檔案中的類模組VBAtest     ABC.Test    '呼叫DLL中提供的過程,來完成原來在VBA中的功能,起到隱藏程式碼的效果     Set ABC = Nothing   '釋放類資源 End Sub   三、在工作表中執行DLLtest巨集即可實現呼叫:


綜上所述,感覺封裝DLL的主要步驟是:
①在VB中引用EXCEL;
②編輯程式碼(要在物件前面加上定義的EXCEL變數);
③在VBE中引用該DLL檔案;

④在VBE的程式碼中呼叫DLL中的過程。

親測可用,轉自 http://ych4943.blog.163.com/blog/static/376967502012842360885/

相關推薦

VBA操作封裝DLL元件EXCEL呼叫

使用程式: 1、Microsoft Office Excel 2003 2、Microsoft Visual Basic 6.0 案例:在工作表的C1單元格得出A1單元格+B1單元格的值。 設計的VBA程式碼: Sub Test()     On Error

C#封裝dll檔案在Labview呼叫

  操作步驟 1.開啟vi的後面板,右鍵單擊選擇“Connectivity”------“.NET”--------"ConstructorNode"此時會彈出窗。選擇所需dll檔案             &nb

VS如何核心函式封裝dll、lib,供給第三方呼叫

本文首發於微信公眾號【視覺IMAX】,作者原創。 文章目錄 前言 一 先封裝核心函式,實現功能 二 將核心函式生成dll、lib(此處以debug模式下為例,release模式下相類似) 三 呼叫dll、lib檔案 四

對話方塊使用ocx控制元件封裝dll

mfc對話方塊中使用了ocx,再封裝為dll,在匯出函式中加入AfxEnableControlContainer() void ShowMyDllDlg(HWND hMainWnd)   //匯出函式 {   AFX_MANAGE_STATE(AfxGetStaticMod

利用反射技術查詢結果封裝對象

long trace leg war sel 反射 test get col public class ORMTest extends HttpServlet { private static final long se

duilib中將xml封裝控制元件簡單示例(簡單自定義控制元件封裝幾個基本控制元件1個自定義控制元件)

使用duilib的時候,難免會有這樣的需求: 某一塊Container(Layout)以及裡面的佈局需要重複用,不想每次都複製貼上這麼多,要不然xml太大了; 通過繼承來自定義一個控制元件,比如CButtonUIEx之類的,想讓他像button一樣在xml中被識別; xml裡面的東西

伺服器響應封裝一個泛型類

/** * * 返回前端資料封裝 */ //當序列化Json物件時,如果是null的物件,key也會消失 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class ServerResponse<T&

利用棧中綴表示式轉換字尾表示式進行計算

[問題描述] 中綴表示式是最普通的一種書寫表示式的方式,而後綴表示式不需要用括號來表示,計算機可簡化對字尾表示式的計算過程,而該過程又是棧的一個典型應用。 [實驗目的] (1) 深入理解棧的特性。 (2) 掌握棧結構的構造方法。 [實驗內容及要求]

Redis操作封裝成Model

Redis經常作為一種記憶體化的資料庫使用,將Redis封裝成Model,同一業務型別資料的操作都放在一個Model裡,這樣可以提高程式碼的可維護性。 為此,我寫了一個開源的庫redmodel,將Redis常用的操作封裝成了類似資料庫查詢語句的方法。 例如一

時間戳轉換時間,輸出“剛剛”、“昨天”、“XX小時前”等

我們在開發iOS程式中需要有介面,有時候藉口提供的時間是NSNumber型別的並且是時間戳。比如說:1447375370 其實這個意思就是1970年0點到當前時間的秒數。 看到這裡,大概我們心裡就有數

C++類 使用template 如何封裝DLL

1.建立一個win32專案,選擇dll建立,如果是已經編寫好的類,則可以勾選”空專案”。 2.在“標頭檔案”目錄下建立新的標頭檔案,這裡以Node類為例:Node.h,將編寫好的Node的宣告寫入Node.h中。 3.注意,一般類的封裝此時就應當寫Node.cpp從而實現該類

ajax請求封裝一個物件(原生js)

var AjaxUtil = { // 預設基礎選項 options : { method : "get", //預設提交的方法 url : "", //請求的路徑 required params : {}, //請求的引數 type : 'text',

C#使用OpenGL:(三).lib檔案編譯.dll檔案

C#不能呼叫C/C++lib檔案的函式,但能呼叫dll檔案的函式。可是現在的情況是,我只有一個lib檔案,函式的實現都在裡邊了。能不能把lib變為dll呢?答案是肯定的。 要把lib編譯為dll大概有三種方法吧: 第一種,就是把lib的函式封裝一下,然後用編

pythonlogging模組封裝成單獨模組實現動態切換Level

查找了很多資料,但網上給出的教程都是大同小異的,而我想將程式碼進一步精簡,解耦,想實現如下兩個目標 1. 將logging模組的初始化,配置,設定等程式碼封裝到一個模組中; 2. 能根據配置切換logging.level, 網上給出的教程都是寫死的,如果我在線上之前使用了l

C#.NET如何cs檔案編譯成dll檔案 exe檔案 如何呼叫dll檔案

比如我要把TestDLL.cs檔案編譯成dll檔案,則在命令提示符下,輸入下面的命令,生成的檔案為TestDLL.dll csc /target:library TestDLL.cs 注意前提是你安裝了.NET Framework並把csc.exe加入了環境變數(參考我的另一

如何頁面上的數據導入excel

進行 mil his spl 查找 inf css ie瀏覽器 art 網上關於頁面數據導入excel的文章很多,但是大部分都是關於 ActiveXObject 對象,可是ActiveXObject 對象是只支持IE的,可我連IE11也測試了,還是無法識別,又查到消息,好像

封裝C#程式碼DLL在C#程式碼引用

1.封裝C#程式碼為DLl 在VS2012中建立專案選擇類庫,命名testMyDll,新建類msg,注意修飾符必須為public using System; using System.Collections.Generic; using System.Linq; using System.T

Python操作Mongodb的用法,其簡單封裝起來

Pymongo pip install pymongo pymongo是python的mongodb client,這裡將其使用方法封裝成class,並提供單元測試用以展示其基本用法。直接看程式碼。

C# NamedPipeClientStream封裝事件驅動的元件

 本封裝的元件,可以方便連線本機或遠端 主機的命名管道。 連線遠端主機時,需要提供帳號和密碼。 同時解決了委託事件中修改介面元素時引起的安全錯誤。 程式碼為【除錯】版,有不少除錯資訊傳遞到呼叫者。 using System; using System.ComponentModel;

swift 錄制多個音頻 音頻轉換mp3 合成多個mp3文件一個文件

art sta ttr 錄制 cti record buffer hub 上傳 我的需求是可以錄制多個文件,最後生成的文件格式為mp3形式,查了下各種資料,因為swift無法直接將音頻錄制為mp3格式,所以最後我采取的解決方案為先將每個單獨的文件轉為mp3,最後逐一合並形成