第一节 Win API的使用 Windows API 是英文Application Programming Interface的缩写,Win32 API也就是微软Windows 32位操作系统的应用程序编程接口。我们可以认为API函数是构筑整个Windows框架的基石,在它的下面是Windows的操作系统核心,而它上面则是Windows的应用程序。在Excel VBA中使用API就是为了开发出实用高效的应用程序,而VBA下使用API函数需进行API函数的声明才能使用。 一、声明API函数 声明VBA所在文件之外的过程或函数就能够访问Windows API或其它外部动态连接库(DLL)。在声明了过程或函数后,其调用方法与VBA自己的过程或函数调用方法相同。要声明一个DLL文件中的过程或函数,需要在代码窗口增加一个Declare语句。例如取的计算机名称的函数 GetComputerName ,作如下声明: Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long 或 Public Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long 以上声明的不同在于所声明函数的使用范围,Private Declare声明的是模块私有,只能在声明它的模块内调用;Public Declare声明的是全局函数,可以在应用程序的任何地方调用,一般我们使用Public Declare声明。声明完毕后就能在程序中使用此函数。 二、使用API函数或过程 以API函数Beep来说明API函数的几种使用方法,Beep函数的介绍如下: 【VBA声明】 Public Declare Function Beep Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long 【说明】 用于生成简单的声音 【返回值】 Long,非零表示成功,否则返回零。 【参数表】 dwFreq --------- Long,声音频率(从37Hz到32767Hz)。 dwDuration ----- Long,声音的持续时间,以毫秒为单位。如为-1,表示一直播放声音,直到再次调用该函数为止。 可采用以下几种方式使用API函数或过程,以Beep为例: (1)忽略函数返回值的调用: Beep 1000, 5000 注意此时函数的参数是不加括号的。 (2)Call方法调用: Call Beep(1000, 5000) 注意这里需要加上括号,但我们不取回函数的返回值。 (3)取得函数返回值的调用: MyLng = Beep(1000, 5000) 此时需要加上括号,而且我们必须事先定义一个变量(变量的类型与函数返回值类型相同)来存储API函数的返回值。 三、声明的一些说明 (1)声明中的Lib 和 Alias 是怎么回事 一般情况下Win32 API函数总是包含在Windows系统自带的或是其它公司提供的动态连接库DLL中,而Declare语句中的关键字Lib就是用来指定DLL(动态连接库)文件路径是系统库路径的,这样VBA才能找到这个DLL文件,然后才能使用其中的API函数。 如果我们只是列出DLL文件名而不指出其完整路径的话,VBA会自动到 Excel文件所在目录、当前工作目录、Windows\System目录、Windows目录下搜寻这个DLL文件。所以如果所要使用的DLL文件不在上述几个目录下的话,我们应该指明其完整路径。 Alias用于指定API函数的别名,如果我们调用的API函数要使用字符串(参数中包含String型)的话,Alias关键字是必须的。这是因为在ANSI和Unicode字符集中同一API函数的名称可能不一样,为了保证不出现声明错误,所以我们使用Alias关键字指出API函数的别名。 (2)常见API参数类型的说明 API函数的参数中最常见的是长整型数据(Long)类型,例如API中的句柄、一些特定的常量、函数的返回值都是此类型的值;另外几种常见的参数类型有:整型Integer、Byte型、String型等。 (3)声明中的ByVal是作什么用的 这跟VBA的参数传递方式有关,在默认情况下VBA是通过传值方式传递函数的参数、而有些API函数要求必须采用地址传递方式(ByRef)来传递函数参数(这两种参数传递方式是不同的,前者传递的是参数真实的值,而后者要求是一个地址指针)。声明中的 ByVal 表明参数是传递一个值。 (4)怎样轻松得到完整API函数声明 Visual Basic 6.0 自带API文本查看器API Text Viewer,我们可以使用它来找到API函数的完整声明,然后把它粘贴到程序就可使用。如果未安装VB6,大家可以到网上下载,此外网络上还有很多API函数的介绍,大家也可以下载来学习。 大家使用API有必要对它进行有一定了解,然后再去使用API文本查看器。虽然不必刻意研究每个API函数(如果真的知道100来个API函数的使用,相信绝对有用),但是需要我们了解一下该函数的作用。而对API函数功能的介绍,网络也有现成的软件供大家下载使用。
[此贴子已经被作者于2006-7-23 16:43:16编辑过] |