重要: 注意 不正確地編輯登錄可能會嚴重損害您的作業系統,而需要重新安裝。 Microsoft 無法保證因不正確地編輯登錄所造成的問題是否能獲得解決。 編輯登錄之前,請備份所有重要的資料。 如需使用及保護您電腦的登錄的最新資訊,請參閱 Microsoft Windows 說明。
本文將說明 Microsoft Excel 中 CALL、REGISTER 及 REGISTER.ID 函數的公式語法及使用方式。
附註: Excel 網頁版不提供 CALL 和 REGISTER 函數。
本文內容
描述
下列將說明 CALL、REGISTER 及 REGISTER.ID 函數所使用的引數與傳回值的資料類型。 視您的作業環境而定,這些引數與傳回值會稍微不同,資料類型表中會註明這些差異。
資料類型
在 CALL、REGISTER 和 REGISTER.ID 函數中,type_text 引數會指定傳回值的資料類型,以及 DLL 函數或程式碼資源之所有引數的資料類型。 type_text 的第一個字元會指定傳回值的資料類型。 其餘的字元則指出所有引數的資料類型。 例如,若 DLL 函數傳回浮點數字,同時也採用整數和浮點數字做為引數,則 type_text 引數需要使用「BIB」。
下面的表格列出 Microsoft Excel 所能辨識的資料類型代碼、每一種資料類型的描述、引數或傳回值的傳遞方式,以及 C 程式語言中該資料類型標準的宣告。
代碼 |
描述 |
傳遞方式 |
C 語言宣告 |
A |
邏輯值 (FALSE = 0,TRUE = 1) |
值 |
short int |
B |
IEEE 8 位元組的浮點數字 |
值 (Windows)參照 (Macintosh) |
double (Windows)double * (Macintosh) |
C |
以空字元結尾的字串 (最大字串長度 = 255) |
參照 |
char * |
D |
位元組計數字串 (第一位元組為字串長度,最大的字串長度 = 255 字元) |
參照 |
Unsigned char * |
E |
IEEE 8 位元組的浮點數字 |
參照 |
double * |
F |
以空字元終止的字串 (最大字串長度 = 255 字元) |
參照 (在適當的位置修改) |
char * |
G |
位元組計數字串 (第一位元組為字串長度,最大的字串長度 = 255 字元) |
參照 (在適當的位置修改) |
unsigned char * |
H |
不含正負號的 2 位元組整數 |
值 |
unsigned short int |
I |
含正負號的 2 位元組整數 |
值 |
short int |
J |
含正負號的 4 位元組整數 |
值 |
long int |
K |
陣列 |
參照 |
FP * |
L |
邏輯值 (FALSE = 0,TRUE = 1) |
參照 |
short int * |
M |
含正負號的 2 位元組整數 |
參照 |
short int * |
N |
含正負號的 4 位元組整數 |
參照 |
long int * |
O |
陣列 |
參照 |
傳遞三個引數: unsigned short int * unsigned short int * double [ ] |
P |
Microsoft Excel OPER 資料結構 |
參照 |
OPER * |
R |
Microsoft Excel XLOPER 資料結構 |
參照 |
XLOPER * |
註解
-
上述 C 語言的宣告,是假設您編譯器的預設值 double 是 8 位元組、short integer 是 2 位元組,而 long integer 是 4 位元組。
-
在 Microsoft Windows 程式設計環境中,所有的指標都是遠程指標。 例如,您必須先將 D 資料類型代碼宣告為 unsigned char far * (在 Microsoft Windows 中)。
-
DLL 和程式碼資源內的所有函數,都會使用 Pascal 語言的呼叫慣例來呼叫。 大部分的 C 語言編譯器都允許您在函數宣告中加入 Pascal 關鍵字,來使用 Pascal 的呼叫慣例,如下例所示: pascal void main (rows,columns,a)
-
如果函數的傳回值是使用傳遞參照位址的資料類型,則可以用零指標當做傳回值。 Microsoft Excel 會把零指標解釋成 #NUM! 錯誤值。
其他資料類型資訊
此節包含了 F、G、K、O、P 和 R 等資料類型的詳細資訊,以及 type_text 引數的其他資訊。
F 和 G 資料類型
對於 F 和 G 資料類型,函數可以修改由 Microsoft Excel 配置的字串緩衝區。 如果傳回值類型代碼是 F 或 G,則 Microsoft Excel 會忽略函數傳回的值。 Microsoft Excel 反而會搜尋第一個對應資料類型 (F 或 G) 函數引數清單,然後把配置的字串緩衝區目前的內容當做傳回值。 Microsoft Excel 會為引數配置 256 個位元組,因此函數傳回的字串可能比收到的字串還大。
K 資料類型
K 資料類型使用了一個不限大小的 FP 結構指標。 您必須在 DLL 或程式碼資源中定義此結構,如下所示:
typedef struct _FP
{ unsigned short int rows; unsigned short int columns; double array[1]; /* Actually, array[rows][columns] */ } FP;
宣告 double array[1] 會配置只供容納單一元素陣列的存放空間。 實際陣列中的元素個數則等於列數乘上欄數。
O 資料類型
O 資料類型只能用於引數,而不能用於傳回值。 它會傳遞三個項目:指向陣列列數的指標、指向陣列欄數的指標,和指到二維浮點數字陣列的指標。
函數不會傳回值,而可以修改 O 資料類型傳遞的陣列。 若要執行此動作,您可以使用 ">O" 做為 type_text 引數。 如需詳細資訊,請參閱下文的「在適當的地方修改 — 函數宣告為 Void」。
O 資料類型是為了要和 Fortran DLL 直接相容才建立的,其中 Fortran 是透過參照方式來傳遞引數。
P 資料類型
P 資料類型是一個指向 OPER 結構的指標。 OPER 結構中包含了八位元組的資料,和二位元組的資料類型識別碼。 使用 P 資料類型,則 DLL 函數或程式碼資源便可以使用並傳回任何一種的 Microsoft Excel 資料類型。
OPER 結構定義如下:
typedef struct _oper
{
union { double num; unsigned char *str; unsigned short int bool; unsigned short int err; struct { struct _oper *lparray; unsigned short int rows; unsigned short int columns; } array; } val; unsigned short int type; } OPER;
類型欄位則包含下列其中一個數值。
類型 |
描述 |
Val 欄位 |
1 |
數值 |
num |
2 |
字串 (第一個位元組為字串的長度) |
str |
4 |
布林值 (邏輯值) |
bool |
16 |
錯誤;錯誤值有: 0#NULL! 7#DIV/0! 15#Value! 23#REF! 29#NAME? 36#NUM! 42#N/A |
err |
64 |
陣列 |
array |
128 |
遺漏的引數 |
|
256 |
空白的儲存格 |
最後的兩個數值只能做為引數,而不能是傳回值。 當呼叫程式省略引數時,便會傳遞遺漏引數值 (128)。 而當呼叫程式傳遞參照到空白儲存格時,則會傳回空白儲存格數值 (256)。
R 資料類型 - 由 DLL 呼叫 Microsoft Excel 函數
R 資料類型是 XLOPER 結構 (OPER 結構的增強版) 的指標。 在 Microsoft Excel 4.0 及更新版本中,您可以使用 R 資料類型撰寫 DLL 和程式碼資源來呼叫 Microsoft Excel 函數。 在 XLOPER 結構中,DLL 函數除了可以傳遞資料外,還可以傳遞工作表參照並實作流程控制項。 R 資料類型與 Microsoft Excel 應用程式開發介面 (API) 的完整說明不在本主題的討論範圍內。 Microsoft Office XP 開發人員指南包含 R 資料類型、Microsoft Excel API 以及 Microsoft Excel 許多其他技術方面的詳細資訊。
動態函數及重算
Microsoft Excel 通常只有在 DLL 函數 (或程式碼資源) 被輸入到儲存格,或者是當它的前導參照更改,或巨集計算到此儲存格時,才會計算其值。 在工作表中,您可以使 DLL 函數或程式碼資源變成為暫時性的,如此則每當工作表重新計算時,它也會跟著重新計算。 若要使函數成為暫時性的,請把驚嘆號 (!) 加為 type_text 引數中最後一個字元便可。
例如在 Microsoft Excel for Windows 中,每當工作表重新計算時,下面的工作表公式便會被重新計算:
CALL("Kernel32","GetTickCount","J!")
在適當的地方修改 - 函數宣告為 Void
您可以在 type_text 中使用單一數字 n 傳回類型代碼,其中 n 是 1 到 9 的數字。 這可告訴 Microsoft Excel 修改 type_text 中第 n 個引數所指向位置中的變數,而不是傳回一個值。 這也稱為在適當的地方修改。 第 n 引數必須以參照資料類型的方式傳遞 (C、D、E、F、G、K、L、M、N、O、P 或 R)。 DLL 函數或程式碼資源也必須用 C 語言使用 void 關鍵字宣告 (或用 Pascal 語言的程序關鍵字)。
例如,若 DLL 函數使用以空字元終止的字串及兩個指向整數的指標來做為引數的話,便可以在適當位置修改字串。 只要把 type_text 引數定為 "1FMM",並將函數宣告為 void 即可。
Microsoft Excel 4.0 之前的版本是使用 > 字元來修改擺在第一個的引數,其餘的引數則沒別的方式可以修改。 在 Microsoft Excel 4.0 及更新版本中,> 字元相當於 n = 1。