การใช้ฟังก์ชัน CALL และ REGISTER

นำไปใช้กับ
Excel for Microsoft 365 Excel for Microsoft 365 for Mac Excel 2024 Excel 2024 for Mac Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2016 Excel for iPad Excel for iPhone Excel สำหรับแท็บเล็ต Android Excel สำหรับโทรศัพท์ Android

สำคัญ

ข้อควรระวัง การแก้ไขรีจิสทรีอย่างไม่ถูกต้องอาจสร้างความเสียหายอย่างร้ายแรงกับระบบปฏิบัติการของคุณ จนทําให้คุณต้องติดตั้งระบบปฏิบัติการใหม่ 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)
สองเท่า
(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 เชิงตรรกะ
(เท็จ = 0, จริง = 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
  • ฟังก์ชันทั้งหมดใน DLLs และ Code Resource ต่างๆ จะถูกเรียกโดยการใช้แบบแผนการเรียกแบบ Pascal คอมไพเลอร์ภาษา C ส่วนใหญ่อนุญาตให้คุณใช้แบบแผนการเรียก Pascal โดยการเพิ่มคําสําคัญ Pascal ลงในการประกาศฟังก์ชัน ดังแสดงในตัวอย่างต่อไปนี้: pascal void main (rows,columns,a)
  • ถ้าฟังก์ชันส่งกลับค่าที่มีชนิดข้อมูลแบบส่งผ่านโดยการอ้างอิง คุณสามารถส่งผ่านตัวชี้ Null (Null Pointer) เป็นค่าส่งกลับได้ 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 สามารถใช้เป็นอาร์กิวเมนต์ได้เท่านั้น จะไม่เป็นค่าส่งกลับ ตัวชี้จะส่งสามรายการ: pointer ไปที่จํานวนของแถวในอาร์เรย์, pointer ไปที่จํานวนคอลัมน์ในอาร์เรย์และ pointer ไปที่อาร์เรย์สองมิติของตัวเลขทศนิยม

แทนที่จะส่งค่ากลับมา ฟังก์ชันจะปรับเปลี่ยนอาร์เรย์ที่ส่งผ่านโดยชนิดข้อมูล 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 และ Code Resource ที่เรียกใช้ฟังก์ชัน Microsoft Excel ได้ ด้วยโครงสร้าง XLOPER ฟังก์ชัน DLL สามารถส่งผ่านการอ้างอิงแผ่นงานและใช้การควบคุมโฟลว์นอกเหนือจากการส่งผ่านข้อมูล คําอธิบายฉบับสมบูรณ์ของชนิดข้อมูล R และ Microsoft Excel Application Programming Interface (API) อยู่นอกเหนือขอบเขตของหัวข้อนี้ คู่มือสําหรับนักพัฒนา 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, E, F, G, K, L, M, N, O, P หรือ R) ฟังก์ชัน DLL หรือ Code Resource จะต้องประกาศด้วยคําสําคัญ void ในภาษา C (หรือคําสําคัญ procedure ในภาษา Pascal)

ตัวอย่างเช่น ฟังก์ชัน DLL ที่รับอาร์กิวเมนต์เป็นสตริงที่สิ้นสุดด้วย null และตัวชี้ไปยังจํานวนเต็มสองตัว สามารถปรับเปลี่ยนสตริงที่ตําแหน่งได้ ให้ใช้ "1FMM" เป็นอาร์กิวเมนต์ type_text และประกาศฟังก์ชันเป็น void

เวอร์ชันก่อนของ Microsoft Excel 4.0 ใช้อักขระเพื่อ > ปรับเปลี่ยนอาร์กิวเมนต์แรกที่ตําแหน่ง แต่ถ้าไม่ใช่อาร์กิวเมนต์ตําแหน่งแรกจะไม่สามารถปรับเปลี่ยนได้เลย อักขระจะ > เท่ากับ n = 1 ใน Microsoft Excel เวอร์ชัน 4.0 และเวอร์ชันที่ใหม่กว่า

ด้านบนของหน้า