淺談API 與 在VBA中的調(diào)用
以前看到VBA里的P lic Declare Function 時真是頭大,光照搬過來用都覺得難現(xiàn)在懂一點點了,特地講出來與大家分享,共同進(jìn)步!畢竟也在EXCELHOME成長了不少
我盡量將其最簡單化,可能有些用詞并不是很準(zhǔn)確,但對于理解確很有幫助(如果沒有代碼基礎(chǔ)的有自信也可以看哦)
我們需要理解:
1,何謂API:
得先講動態(tài)程式庫(DLL文件),DLL文件你可以把它想象成一個開機(jī)就運行的 含有很多全局函數(shù)的 程序 (可以說DLL是windows的基礎(chǔ),windows的大部分功能就是靠dll完成的)
而API 是包裝在DLL文件中的函數(shù)(跟VBA寫的函數(shù)沒啥區(qū)別,只是語言不同),現(xiàn)在我們就可以把API稱作為函數(shù)了,DLL文件中封裝的每個函數(shù)都對外有一個接口,接口由函數(shù)名,參數(shù)表組成,像下面這個例子一樣
=============================================================
對外輸出申明 S test2(int number) “test2”就是API函數(shù)名稱 “(int number)”就是參數(shù)表
MsgBox(“Hello!”)
End S
==============================================================
這個API函數(shù)作用是向調(diào)用的程序顯示一個消息框,而其它的API只是功能不一樣,但結(jié)構(gòu)差不多;
現(xiàn)在了解API的大概與原理了那就可以看怎么使用了
2,VBA中怎么調(diào)用API
VBA我們有一個通用的方法調(diào)用,這個得舉例了,如下
P lic Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
得先認(rèn)關(guān)鍵字,關(guān)鍵字就是系統(tǒng)定義好的,你調(diào)用就好了,就是要記得東西,這里的關(guān)鍵字有
P lic Declare Function
Lib
Alias
(ByVal As String, ByVal as String)
As Long
這些關(guān)鍵字如果一點也不熟悉,你可以參考EXCEL VBA幫助文檔,現(xiàn)在講這個例子的含義
“P lic Declare Function”:
這個部分你可以記下來,“p lic” 不用我講了 全局的 “Declare Function” 可以理解為定義一個函數(shù)
“FindWindow”:
隨便寫的自己用的函數(shù)名
“Lib "user32" Alias "FindWindowA" ”:
核心部分,涉及的東西很多,但你不用灰心,記下一個就是一個(用法都是死的),還可以去網(wǎng)上下一個API大全(自己下?。?“Lib "user32"” 載入 user32.dll 文件,其實也可以寫成“Lib "C:\WINDOWS\system32\user32.dll"”,這才是真面目(是因為環(huán)境變量里頭有設(shè)定系統(tǒng)路徑,才可寫成“Lib "user32"”)。“Alias "FindWindowA" ” FindWindowA表示API對外的接口,也就是原始函數(shù)名。我們給它重新定義是防止重名
(ByVal lpClassName As String, ByVal lpWindowName As String):
這個就是1中講到的參數(shù)表了,dll文件的對外接口是兼容C語言的,VBA是基于VB的(這樣說沒錯吧)所以在VBA中就出現(xiàn)了這個異樣參數(shù)表了,ByVal (by val)表示傳值 ,還有一種叫傳內(nèi)存地址,VBA好像不能對內(nèi)存操作,我們不討論。“lpClassName As String”這個參數(shù)類型是對應(yīng)API函數(shù)參數(shù)表,需要與API一一對應(yīng)。如果不了解API,你只需要把這個記下來就可以,真正去看API也是這樣的。多看些API就會有收獲的