astype函数_Excel VBA|在VBA中调用Windows API库中函数

任何一个稍复杂的程序都不是从0开始的,都是从库(函数库或类库)搭建起来的。

在Excel VBA中,你可以调用工作表的函数、VBA函数、可以引用用户自己定义的函数或过程。除此以外,还可以调用Windows API库的函数。

Windows API是Windows编程人员可以使用的一套函数。在VBA模块中引入某个库的函数后,便可直接调用这个Windows函数。

引入Windows API库的某个函数需要在模块的顶点声明,如

Declare PtrSafe Function GetWindowsDirectoryA Lib "kernel32" _

(ByVal lpBuffer As String, ByVal nSize As Long) As Long

declare:在模块级用于声明对动态链接库(DLL)中的外部过程的引用;

PtrSafe:同时兼容Excel的32位和64位版本;

GetWindowsDirectoryA:函数名,可以VBA过程或函数中调用;

"kernel32":表示上述函数所在的动态库(DLL);

该函数参数lpBuffer:返回Windows所在目录名称;

该函数参数nSize:Windows所在目录名称的字符串长度包含在此参数中;

如果代码模块是UserFor、Sheet或ThisWorkbook的代码模块,就必须用Private关键字声明这个API函数。

实例:

Option Explicit#If VBA7 And Win64 Then Declare PtrSafe Function GetWindowsDirectoryA Lib "kernel32" _ (ByVal lpBuffer As String, ByVal nSize As Long) As Long#Else Declare Function GetWindowsDirectoryA Lib "kernel32" _ (ByVal lpBuffer As String, ByVal nSize As Long) As Long#End IfSub ShowWindowsDir() Dim WinPath As String * 255 '长度255的字符串 Dim WinDir As String WinPath = Space(255) WinDir = Left(WinPath, GetWindowsDirectoryA(WinPath, Len(WinPath))) MsgBox WinDir, vbInformation, "Windows Directory"End SubFunction WINDOWSDIR() As String' Returns the Windows directory Dim WinPath As String * 255 WinPath = Space(255) WINDOWSDIR = Left(WinPath, GetWindowsDirectoryA(WinPath, Len(WinPath)))End Function

用于在模块级别中声明对动态链接库 (DLL) 中外部过程的引用。

语法 1

[Public | Private] Declare Sub name Lib "libname" [Alias "aliasname"] [([arglist])]

语法 2

[Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]

Public 可选的。用于声明对所有模块中的所有其它过程都可以使用的过程。

Private 可选的。用于声明只能在包含该声明的模块中使用的过程。

Sub 可选的(但 Sub 或 Function 二者需选其一)。表示该过程没有返回值。

Function 可选的(但 Sub 或 Function 二者需选其一)。表示该过程会返回一个可用于表达式的值。

name 必需的。任何合法的过程名。注意动态链接库的入口处(entry points)区分大小写。

Lib 必需的。指明包含所声明过程的动态链接库或代码资源。所有声明都需要 Lib 子句。

libname 必需的。包含所声明的过程动态链接库名或代码资源名。

Alias 可选的。表示将被调用的过程在动态链接库 (DLL) 中还有另外的名称。当外部过程名与某个关键字重名时,就可以使用这个参数。当动态链接库的过程与同一范围内的公用变量、常数或任何其它过程的名称相同时,也可以使用 Alias。如果该动态链接库过程中的某个字符不符合动态链接库的命名约定时,也可以使用 Alias。

aliasname 可选的。动态链接库或代码资源中的过程名。如果首字符不是数字符号 (#),则 aliasname 是动态链接库中该过程的入口处的名称。如果首字符是 (#),则随后的字符必须指定该过程的入口处的顺序号。

arglist 可选的。代表调用该过程时需要传递的参数的变量表。

type 可选的。Function 过程返回值的数据类型;可以是 Byte、布尔、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)或 Variant,用户定义类型,或对象类型。

arglist 参数的语法以及语法各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]

Optional 可选的。表示参数不是必需的。如果使用该选项,则 arglist 中的后续参数都必需是可选的,而且必须都使用 Optional 关键字声明。如果使用了 ParamArray,则任何参数都不能使用 Optional。

ByVal 可选的。表示该参数按值传递。

ByRef 表示该参数按地址传递。 ByRef 是 Visual Basic 的缺省选项。

ParamArray 可选的。只用于 arglist 的最后一个参数,表示最后的参数是一个 Variant 元素的 Optional 的数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByVal、ByRef或 Optional 一起使用。

varname 必需的。代表传给该过程的参数的变量名;遵循标准的变量命名约定。

( ) 对数组变量是必需的。指明 varname 是一个数组。

type 可选的。传递给该过程的参数的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object、Variant、用户自定义的类型或对象类型。

说明

对Function 过程而言,过程的数据类型决定其返回值的数据类型。可以在 arglist 之后使用 As 子句来指定函数返回值的数据类型。在 arglist 中,可以使用 As 子句来指定任何传给该过程的参数的数据类型。不单可以指定为任何标准数据类型,还可以在 arglist 中指定 As Any 来禁止类型检查,从而允许将任意数据类型传递给该过程。

空圆括号表示该 Sub 或 Function 过程没有参数,且 Visual Basic 应确保不会传递任何参数。在下面的示例中,First 不带任何参数。如果对 First 的调用中使用了参数,就会产生错误:

Declare Sub First Lib "MyLib" ()如果带参数表,则每次调用该过程时都要检查参数的个数和类型。在下面的示例中,First 有一个 Long 参数:

Declare Sub First Lib "MyLib" (X As Long)注意 在 Declare 语句的参数表中不能有定长的字符串;只有变长的字符串才能传给过程。定长的字符串可以作为过程参数使用,但在传递前都要被转换为变长的字符串。

注意 当所调用的外部过程需要一个值为 0 的字符串时,就要使用 vbNullString 常数。该常数与零长度字符串 ("") 是不相同的。

可以在下面的地址中查看Windows API文档:http://www.office-cn.net/t/api/index.html?apihelp.htm

0160409606d705991a7858be72dda776.png

-End-

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值