浅谈API 与 在VBA中的调用以前看到VBA里的P lic Declare Function 时真是头大,光照搬过来用都觉得难现在懂一点点了,特地讲出来与大家分享,共同进步!毕竟也在EXCELHOME成长了不少
我尽量将其最简单化,可能有些用词并不是很准确,但对于理解确很有帮助(如果没有代码基础的有自信也可以看哦) 我们需要理解: 1,何谓API: 得先讲动态程式库(DLL文件),DLL文件你可以把它想象成一个开机就运行的 含有很多全局函数的 程序 (可以说DLL是windows的基础,windows的大部分功能就是靠dll完成的) 而API 是包装在DLL文件中的函数(跟VBA写的函数没啥区别,只是语言不同),现在我们就可以把API称作为函数了,DLL文件中封装的每个函数都对外有一个接口,接口由函数名,参数表组成,像下面这个例子一样 ============================================================= 对外输出申明 S test2(int number) “test2”就是API函数名称 “(int number)”就是参数表 MsgBox(“Hello!”) End S ============================================================== 这个API函数作用是向调用的程序显示一个消息框,而其它的API只是功能不一样,但结构差不多; 现在了解API的大概与原理了那就可以看怎么使用了 2,VBA中怎么调用API VBA我们有一个通用的方法调用,这个得举例了,如下 P lic Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 得先认关键字,关键字就是系统定义好的,你调用就好了,就是要记得东西,这里的关键字有 P lic Declare Function Lib Alias (ByVal As String, ByVal as String) As Long 这些关键字如果一点也不熟悉,你可以参考EXCEL VBA帮助文档,现在讲这个例子的含义 “P lic Declare Function”: 这个部分你可以记下来,“p lic” 不用我讲了 全局的 “Declare Function” 可以理解为定义一个函数 “FindWindow”: 随便写的自己用的函数名 “Lib "user32" Alias "FindWindowA" ”: 核心部分,涉及的东西很多,但你不用灰心,记下一个就是一个(用法都是死的),还可以去网上下一个API大全(自己下啊).“Lib "user32"” 载入 user32.dll 文件,其实也可以写成“Lib "C:\WINDOWS\system32\user32.dll"”,这才是真面目(是因为环境变量里头有设定系统路径,才可写成“Lib "user32"”)。“Alias "FindWindowA" ” FindWindowA表示API对外的接口,也就是原始函数名。我们给它重新定义是防止重名 (ByVal lpClassName As String, ByVal lpWindowName As String): 这个就是1中讲到的参数表了,dll文件的对外接口是兼容C语言的,VBA是基于VB的(这样说没错吧)所以在VBA中就出现了这个异样参数表了,ByVal (by val)表示传值 ,还有一种叫传内存地址,VBA好像不能对内存操作,我们不讨论。“lpClassName As String”这个参数类型是对应API函数参数表,需要与API一一对应。如果不了解API,你只需要把这个记下来就可以,真正去看API也是这样的。多看些API就会有收获的 |
|