สิ่งสำคัญ: ความระมัดระวัง การแก้ไขรีจิสทรีอย่างไม่ถูกต้องอาจสร้างความเสียหายอย่างร้ายแรงกับระบบปฏิบัติการของคุณ และทําให้คุณต้องติดตั้งระบบปฏิบัติการใหม่ Microsoft ไม่สามารถรับประกันได้ว่าจะสามารถแก้ไขปัญหาที่เป็นผลมาจากการแก้ไขรีจิสทรีอย่างไม่ถูกต้องได้ ก่อนที่จะแก้ไขรีจิสทรี ให้สํารองข้อมูลอันมีค่าใดๆ สําหรับข้อมูลล่าสุดเกี่ยวกับการใช้และการปกป้องรีจิสทรีของคอมพิวเตอร์ของคุณ ให้ดู วิธีใช้ Microsoft Windows
บทความนี้จะอธิบายถึงไวยากรณ์ของสูตรและการใช้ฟังก์ชัน CALL, REGISTER และ REGISTER.ID ใน Microsoft Excel
หมายเหตุ: ฟังก์ชัน CALL และ REGISTER ไม่พร้อมใช้งานใน Excel สำหรับเว็บ
ในบทความนี้
คำอธิบาย
ต่อไปนี้จะอธิบายอาร์กิวเมนต์และชนิดข้อมูลค่าที่ส่งกลับซึ่งใช้โดยฟังก์ชัน CALL, REGISTER และ REGISTER.ID อาร์กิวเมนต์และค่าที่ส่งกลับจะแตกต่างกันเล็กน้อยขึ้นอยู่กับสภาพแวดล้อมในการดําเนินการของคุณ และข้อแตกต่างเหล่านี้จะระบุไว้ในตารางชนิดข้อมูล
ชนิดข้อมูล
ในฟังก์ชัน CALL, REGISTER และ REGISTER.ID อาร์กิวเมนต์ type_text จะระบุชนิดข้อมูลของค่าที่ส่งกลับและชนิดข้อมูลของอาร์กิวเมนต์ทั้งหมดสําหรับฟังก์ชัน DLL หรือ Code Resource อักขระตัวแรกของ type_text ระบุชนิดข้อมูลของค่าที่ส่งกลับ อักขระที่เหลือจะระบุชนิดข้อมูลของอาร์กิวเมนต์ทั้งหมด ตัวอย่างเช่น ฟังก์ชัน DLL ที่ส่งกลับตัวเลขทศนิยมและใช้จํานวนเต็มและจํานวนจุดลอยตัวเนื่องจากอาร์กิวเมนต์ต้องใช้ "BIB" สําหรับอาร์กิวเมนต์ type_text
ตารางต่อไปนี้ประกอบด้วยรายการโค้ดชนิดข้อมูลทั้งหมดที่ Microsoft Excel รู้จัก พร้อมด้วยคำอธิบายของแต่ละชนิดข้อมูล วิธีส่งผ่านค่าอาร์กิวเมนต์หรือค่าส่งกลับ และแบบอย่างการประกาศข้อมูลสำหรับชนิดข้อมูลในโปรแกรมภาษา C
โค้ด |
คำอธิบาย |
ส่งผ่านโดย |
การประกาศใน C |
A |
ตรรกะ (FALSE = 0), TRUE = 1) |
ค่า |
short int |
B |
ตัวเลขทศนิยม IEEE 8 ไบต์ |
ค่า (Windows)การอ้างอิง (Macintosh) |
double (Windows)double * (Macintosh) |
C |
สตริงที่จบด้วย Null (ความยาวสตริงสูงสุด = 255) |
การอ้างอิง |
char * |
D |
สตริงแบบนับจากจำนวนไบต์ (ไบต์แรกระบุความยาวสตริง ซึ่งมีความยาวสตริงสูงสุด = 255 อักขระ) |
การอ้างอิง |
Unsigned char * |
E |
ตัวเลขทศนิยม IEEE 8 ไบต์ |
การอ้างอิง |
double * |
F |
สตริงที่จบด้วย Null (ความยาวสตริงสูงสุด = 255 อักขระ) |
การอ้างอิง (ปรับเปลี่ยนที่ตำแหน่ง) |
char * |
G |
สตริงแบบนับจากจำนวนไบต์ (ไบต์แรกระบุความยาวสตริง ซึ่งมีความยาวสตริงสูงสุด = 255 อักขระ) |
การอ้างอิง (ปรับเปลี่ยนที่ตำแหน่ง) |
unsigned char * |
H |
จำนวนเต็ม 2 ไบต์แบบไม่ใส่เครื่องหมาย |
ค่า |
unsigned short int |
I |
จำนวนเต็ม 2 ไบต์แบบใส่เครื่องหมาย |
ค่า |
short int |
J |
จำนวนเต็ม 4 ไบต์แบบใส่เครื่องหมาย |
ค่า |
long int |
K |
Array |
การอ้างอิง |
FP * |
l |
ตรรกะ (FALSE = 0, TRUE = 1) |
การอ้างอิง |
short int * |
M |
จำนวนเต็ม 2 ไบต์แบบใส่เครื่องหมาย |
การอ้างอิง |
short int * |
N |
จำนวนเต็ม 4 ไบต์แบบใส่เครื่องหมาย |
การอ้างอิง |
long int * |
O |
Array |
การอ้างอิง |
ส่งผ่านสามอาร์กิวเมนต์: unsigned short int * unsigned short int * double [ ] |
P |
โครงสร้างข้อมูลของ Microsoft Excel OPER |
การอ้างอิง |
OPER * |
R |
โครงสร้างข้อมูลของ Microsoft Excel XLOPER |
การอ้างอิง |
XLOPER * |
ข้อสังเกต
-
การประกาศในภาษา C ขึ้นอยู่กับข้อสมมติที่ว่า คอมไพเลอร์ของคุณมีค่าเริ่มต้นเป็น 8 ไบต์สำหรับ double 2 ไบต์สำหรับ short interger และ 4 ไบต์สำหรับ long interger
-
ในสภาพแวดล้อมการเขียนโปรแกรมของ Microsoft Windows ตัวชี้ทั้งหมดเป็นตัวชี้ที่ห่างไกล ตัวอย่างเช่น คุณต้องประกาศรหัสชนิดข้อมูล D เป็น unsigned char far * ใน Microsoft Windows
-
ฟังก์ชันทั้งหมดใน DLL และ Code Resources จะถูกเรียกโดยใช้แบบแผนการเรียก Pascal คอมไพเลอร์ C ส่วนใหญ่อนุญาตให้คุณใช้แบบแผนการโทร Pascal โดยการเพิ่มคําสําคัญ Pascal ลงในการประกาศฟังก์ชัน ตามที่แสดงในตัวอย่างต่อไปนี้: pascal void main (rows,columns,a)
-
ถ้าฟังก์ชันใช้ชนิดข้อมูลแบบพาส-บายการอ้างอิงสําหรับค่าที่ส่งกลับ คุณสามารถส่งผ่านตัวชี้ Null เป็นค่าที่ส่งกลับได้ Microsoft Excel จะแปลตัวชี้ Null เป็น #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 หรือ Code Resource ดังนี้:
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 ซึ่งส่งผ่านอาร์กิวเมนต์โดยการอ้างอิง
ชนิดข้อมูล P
ชนิดข้อมูล P คือตัวชี้ไปยังโครงสร้าง OPER โครงสร้าง OPER ประกอบด้วยข้อมูล 8 ไบต์ ตามด้วยตัวระบุ 2 ไบต์ที่ระบุชนิดของข้อมูล ด้วยชนิดข้อมูล P ฟังก์ชัน DLL หรือ Code Resource สามารถรับและส่งกลับชนิดข้อมูล 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 การเรียกฟังก์ชัน Microsoft Excel จาก DLL
ชนิดข้อมูล R คือตัวชี้ไปยังโครงสร้าง XLOPER ซึ่งเป็นโครงสร้าง OPER เวอร์ชันที่ได้รับการปรับปรุง ใน Microsoft Excel เวอร์ชัน 4.0 และใหม่กว่า คุณสามารถใช้ชนิดข้อมูล R เพื่อเขียน DLL และโค้ดทรัพยากรที่เรียกใช้ฟังก์ชัน Microsoft Excel ได้ ด้วยโครงสร้าง XLOPER ฟังก์ชัน DLL สามารถส่งผ่านการอ้างอิงแผ่นงานและใช้ตัวควบคุมลําดับนอกเหนือจากการส่งผ่านข้อมูล คําอธิบายที่สมบูรณ์ของชนิดข้อมูล R และอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API) ของ Microsoft Excel อยู่นอกเหนือขอบเขตของหัวข้อนี้ คู่มือของนักพัฒนา Microsoft Office XP ประกอบด้วยข้อมูลโดยละเอียดเกี่ยวกับชนิดข้อมูล R, Microsoft Excel API และแง่มุมทางเทคนิคอื่นๆ อีกมากมายของ Microsoft Excel
ฟังก์ชันที่เปลี่ยนแปลงได้ และการคำนวณใหม่
Microsoft Excel มักจะคํานวณฟังก์ชัน DLL (หรือ Code Resource) เฉพาะเมื่อใส่ลงในเซลล์ เมื่อเซลล์ที่ถูกอ้างมีการเปลี่ยนแปลง หรือเมื่อเซลล์ถูกคํานวณระหว่างแมโคร บนเวิร์กชีต คุณสามารถทําให้ฟังก์ชัน DLL หรือ Code Resource เปลี่ยนแปลงได้ ซึ่งหมายความว่าจะคํานวณใหม่ทุกครั้งที่เวิร์กชีตมีการคํานวณเวิร์กชีตใหม่ เมื่อต้องการทําให้ฟังก์ชันเปลี่ยนแปลงได้ ให้เพิ่มเครื่องหมายอัศเจรีย์ (!) เป็นอักขระสุดท้ายในอาร์กิวเมนต์ type_text
ตัวอย่างเช่น ใน Microsoft Excel for Windows สูตรเวิร์กชีตต่อไปนี้จะคำนวณใหม่ทุกครั้งที่เวิร์กชีตมีการคำนวณใหม่
CALL("Kernel32","GetTickCount","J!")
การปรับเปลี่ยนที่ตำแหน่ง ฟังก์ชันที่ประกาศเป็น Void
คุณสามารถใช้หลักเดียว n สําหรับรหัสชนิดการส่งคืนใน type_text โดย n คือตัวเลขตั้งแต่ 1 ถึง 9 การทําเช่นนี้จะบอกให้ Microsoft Excel ปรับเปลี่ยนตัวแปรในตําแหน่งที่ตั้งที่ชี้ไปยังโดยอาร์กิวเมนต์ที่ n ใน type_text แทนที่จะส่งกลับค่า เรียกอีกอย่างว่าการปรับเปลี่ยน อาร์กิวเมนต์ที่ n ต้องเป็นชนิดข้อมูลแบบส่งผ่านโดยการอ้างอิง (C, D,, F, G, K, L, M, N, O, P หรือ R) ฟังก์ชัน DLL หรือ Code Resource ต้องได้รับการประกาศด้วยคําสําคัญที่เป็นโมฆะในภาษา C (หรือคําสําคัญของกระบวนงานในภาษา Pascal)
ตัวอย่างเช่น ฟังก์ชัน DLL ที่ใช้สตริงที่จบด้วย null และตัวชี้ไปยังจํานวนเต็มสองตัวเป็นอาร์กิวเมนต์สามารถปรับเปลี่ยนสตริงได้ ใช้ "1FMM" เป็นอาร์กิวเมนต์ type_text และประกาศฟังก์ชันเป็นโมฆะ
เวอร์ชันก่อนหน้า Microsoft Excel 4.0 จะใช้อักขระ > ในการปรับเปลี่ยนอาร์กิวเมนต์แรก ไม่มีวิธีการปรับเปลี่ยนอาร์กิวเมนต์ใดๆ ที่ไม่ใช่อาร์กิวเมนต์แรก อักขระ > เทียบเท่ากับ n = 1 ใน Microsoft Excel เวอร์ชัน 4.0 และเวอร์ชันที่ใหม่กว่า