[VB6] 調用Excel函數及副程式

摘要:[VB6] 調用Excel函數及副程式

 

 

 

 

 

 

如果很瞭解excel函數功能的話,在vb底下也能呼叫函數,就小弟所知,excel有些含數是vb所沒有的,例如maxmin這兩個函數是在求最大值及最小值,若是用vb寫這兩種功能可能要花掉不少時間,(網路上有一堆排序法,直接拿來copy也很快   哈哈)

 

 

以下內容出於為http://blog.blueshop.com.tw/HammerChou/archive/2006/01/10/16062.aspx

用心學習吧~

=================================================================================================================

 

如何不使用數學運算 而直接使用 Excel LCM 函數來取 [最小公倍數 

    Dim xls As Object ' 建立物件    

    Set xls = CreateObject("Excel.Application") ' 建立 Excel Application 物建實體 ( 個體化 

    ' Excel 工作簿(集合物件) 開啟 atpvbaen.xla 增益集     ' xls.LibraryPath Excel 函式庫資料夾路徑 1

    ' 呼叫 RunAutoMacros 方法來執行巨集 (Macro) -  2

    ' 1 xlAutoOpen - 3

    xls.Workbooks.Open(xls.LibraryPath & "\Analysis\atpvbaen.xla").RunAutoMacros 1

    ' 使用 atpvbaen.xla 增益集中 LCM 函數來求取 6 , 12 , 144 的最小公倍數

    MsgBox xls.Run("atpvbaen.xla!LCM", 6, 12, 144) ' 方法1

    ' GetMacroRegId 取得巨集登錄(註冊)ID

    ' 透過 GetMacroRegId 來取得 LCM 函數來計算 6 , 12 , 144 的最小公倍數

    MsgBox xls.Run("GetMacroRegId(""lcm"")", 6, 12, 144) ' 方法2   

    xls.Quit ' 離開 ; 關閉 Excel

    Set xls = Nothing ' 釋放 Excel 應用程式物件

By the way , 同理 .. 若語言本身無某些特定數學函數 , 則可運用此一方法來呼叫 Excel 函數使用

1 :

Excel 常用預設路徑

' 傳回取代啟動資料夾的名稱

        Application.AltStartupPath     

' 傳回目前工作簿的路徑 (檔案未存檔時傳回空字串)

        ActiveWorkbook.Path 

' 現用目前工作簿的路徑及檔案名稱(檔案未存檔時只傳回暫存檔名)            

        ActiveWorkbook.FullName

' 傳回儲存範本所在的網路路徑,如果指定的網路路徑不存在,本屬性將傳回一空字串          

        Application.NetworkTemplatesPath 

' 傳回儲存範本所在的區域路徑

        Application.TemplatesPath      

' 傳回Excel程式完整路徑

        Application.Path              

' 傳回或者設定 Microsoft Excel 開啟檔案時使用的預設路徑

        Application.DefaultFilePath      

' 傳回啟動資料夾的完整路徑

        Application.StartupPath          

' 傳回程式庫資料夾的路徑

        Application.LibraryPath         

' 傳回使用者電腦上 COM 增益集安裝位置的路徑 (2000以上)

        Application.UserLibraryPath      

' 傳回路徑分隔符號

        Application.PathSeparator        

2 :

Excel 內有兩個自動巨集 , 一個是 Auto_Open , 一個是 Auto_Close

作用

Excel 開啟內含巨集的工作簿時 , 會自動執行 Auto_Open , 當關閉時會執行 Auto_Close

        但若透過程式呼叫建立 Excel 應用程式物件時 ( OLE Automation ; ActiveX )

        則並不會執行 Auto_Open , Auto_Close , 因此需透過 RunAutoMacros 方法來設定執行(動作)

3 :

RunAutoMacros 方法

        Workbooks.RunAutoMacros(引數)

常數說明

        xlAutoOpen : 1 - 自動開啟巨集

        xlAutoClose : 2 - 自動關閉巨集

        xlAutoActivate : 3 - 巨集作用

        xlAutoDeactivate : 4 - 使巨集無效

=================================================================================================================

 

小弟根據本篇文章得到結果,若excel的函數可調用,那調用excel的巨集一樣可行,附件內容為小弟完成的範例,調用DBTEMPLET(共有813*86)資料來做實驗,原因是vbexcel大資料的時候真的很慢,所以才想要用excel vba當副程式計算,再將計算完成的資料再回傳至vb主程式,這樣算出來的結果大約是4多秒,差強人意,但速度上已經比用vb直接讀excel快上很多(一分多鐘)

 

in form

 

因為沒有寫回傳結果的程式,就用中斷的方式去檢查資料是否回傳。

VB Call Excel Function.zip

 

 

 

 

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo