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

สิ่งสำคัญ: ข้อควรระวัง    การแก้ไขรีจิสทรีอย่างไม่ถูกต้องอาจสร้างความเสียหายอย่างร้ายแรงกับระบบปฏิบัติการของคุณ จนทำให้คุณต้องติดตั้งระบบปฏิบัติการใหม่ Microsoft ไม่สามารถรับประกันได้ว่าจะสามารถแก้ไขปัญหาที่เป็นผลมาจากการแก้ไขรีจิสทรีอย่างไม่ถูกต้องได้ ก่อนทำการแก้ไขรีจิสทรี ให้สำรองข้อมูลที่สำคัญไว้ สำหรับข้อมูลล่าสุดเกี่ยวกับการใช้งานและการปกป้องรีจิสทรีในคอมพิวเตอร์ของคุณ ให้ดูวิธีใช้ของ Microsoft Windows

บทความนี้จะอธิบายถึงไวยากรณ์ของสูตรและการใช้ฟังก์ชัน CALL, REGISTER และ REGISTER.ID ใน Microsoft Excel

หมายเหตุ: ฟังก์ชัน CALL และ REGISTER จะใช้งานไม่ได้ใน Excel Online

ในบทความนี้

คำอธิบาย

ชนิดข้อมูล

ข้อสังเกต

ข้อมูลเกี่ยวกับชนิดข้อมูลเพิ่มเติม

ชนิดข้อมูล F และ G

ชนิดข้อมูล K

ชนิดข้อมูล O

ชนิดข้อมูล P

ชนิดข้อมูล R การเรียกฟังก์ชัน Microsoft Excel จาก DLL

ฟังก์ชันที่เปลี่ยนแปลงได้ และการคำนวณใหม่

การปรับเปลี่ยนที่ตำแหน่ง ฟังก์ชันที่ประกาศเป็น Void

คำอธิบาย

ต่อไปนี้จะอธิบายอาร์กิวเมนต์และชนิดข้อมูลค่าที่ส่งกลับโดยฟังก์ชัน 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 ตัวชี้ทั้งหมดจะเป็นแบบ far ตัวอย่างเช่น คุณจะต้องประกาศโค้ดชนิดข้อมูล 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 สามารถใช้เป็นอาร์กิวเมนต์ได้เท่านั้น จะไม่เป็นค่าที่ส่งกลับ ชนิดข้อมูลนี้จะส่ง 3 รายการคือ 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) และเมื่อตัวเรียกฟังก์ชันส่งผ่านการอ้างอิง (reference) ไปยังเซลล์ว่าง ก็จะมีการส่งผ่านค่าในเซลล์ว่าง (256) ไป

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

ชนิดข้อมูล R การเรียกฟังก์ชัน Microsoft Excel จาก DLL

ชนิดข้อมูล R เป็นตัวชี้ไปยังโครงสร้าง XLOPER ซึ่งเป็นโครงสร้าง OPER เวอร์ชันที่ปรับปรุงประสิทธิภาพการทำงานแล้ว โดยใน Microsoft Excel เวอร์ชัน 4.0 และเวอร์ชันใหม่กว่านั้น คุณสามารถใช้ชนิดข้อมูล R เพื่อเขียน DLL และ Code Resources ที่ใช้สำหรับเรียกฟังก์ชันของ Microsoft ได้ ซึ่งโครงสร้าง XLOPER นี้จะทำให้ฟังก์ชัน DLL สามารถส่งผ่านการอ้างอิงแผ่นงานและจัดการการไหลของข้อมูลได้ นอกเหนือจากความสามารถในการส่งผ่านข้อมูล คำอธิบายทั้งหมดเกี่ยวกับชนิดข้อมูล R และ Application Programming Interface (API) ของ Microsoft Excel นั้นอยู่เกินขอบข่ายของหัวข้อนี้ Microsoft Office XP Developer ' s Guide จะมีรายละเอียดของข้อมูลเกี่ยวกับ ชนิดข้อมูล 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 ชี้ไป แทนที่จะเป็นการส่งค่ากลับ เรียกวิธีนี้ว่าการปรับเปลี่ยนที่ตำแหน่ง (modifying in place) อาร์กิวเมนต์ที่ 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 และเวอร์ชันที่ใหม่กว่า

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

ขยายทักษะของคุณ
สำรวจการฝึกอบรม
รับฟีเจอร์ใหม่ก่อนใคร
เข้าร่วม Office Insider

ข้อมูลนี้เป็นประโยชน์หรือไม่

ขอบคุณสำหรับคำติชมของคุณ!

ขอขอบคุณสำหรับคำติชมของคุณ! เราคิดว่าอาจเป็นประโยชน์ที่จะให้คุณได้ติดต่อกับหนึ่งในตัวแทนฝ่ายสนับสนุน Office ของเรา

×