天天看點

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

astype函數_Excel VBA|在VBA中調用Windows API庫中函數

-End-