Dùng các hàm CALL và REGISTER

Quan trọng: Lưu ý    Việc sửa sổ đăng ký không đúng cách có thể gây hại nghiêm trọng cho hệ điều hành của bạn, đòi hỏi bạn phải cài đặt lại hệ điều hành. Microsoft không thể đảm bảo có thể giải quyết được các vấn đề do việc sửa sổ đăng ký không đúng cách gây ra. Trước khi sửa sổ đăng ký, hãy sao lưu dự phòng mọi dữ liệu quý giá. Để có những thông tin mới nhất về việc dùng và bảo vệ sổ đăng ký trên máy tính của bạn, hãy xem Trợ giúp Microsoft Windows.

Bài viết này mô tả cách dùng và cú pháp công thức của hàm CALL, REGISTER và REGISTER.ID trong Microsoft Excel.

Ghi chú: Hàm CALL và REGISTER không sẵn dùng trong Excel Online.

Trong bài viết này

Mô tả

Kiểu dữ liệu

Chú thích

Thông tin về Kiểu Dữ liệu Bổ sung

Kiểu Dữ liệu F và G

Kiểu Dữ liệu K

Kiểu Dữ liệu O

Kiểu Dữ liệu P

Kiểu Dữ liệu R — Gọi các hàm Microsoft Excel từ các DLL

Hàm Biến đổi và Tính toán lại

Thay đổi tại Chỗ — Các Hàm được Khai báo dưới dạng Rỗng

Mô tả

Bên dưới là mô tả về đối số và các kiểu giá trị trả về được dùng trong các hàm CALL, REGISTER và REGISTER.ID. Đối số và giá trị trả về khác nhau một chút tùy thuộc vào môi trường thao tác của bạn và sự khác nhau này được ghi chú trong bảng kiểu dữ liệu.

Đầu Trang

Kiểu Dữ liệu

Trong hàm CALL, REGISTER và REGISTER.ID, đối số kiểu văn bản xác định kiểu dữ liệu của giá trị trả về và các kiểu dữ liệu của tất cả các đối số cho hàm DLL hoặc nguồn mã. Ký tự đầu tiên trong kiểu văn bản sẽ xác định kiểu dữ liệu của giá trị trả về. Các ký tự còn lại sẽ cho biết các kiểu dữ liệu về tất cả các đối số. Ví dụ: một hàm DLL trả về một số dấu phẩy động và nhận một số nguyên và một số dấu phẩy động làm các đối số sẽ cần "BIB" cho đối số kiểu văn bản.

Bảng sau đây bao gồm một danh sách đầy đủ về các mã kiểu dữ liệu mà Microsoft Excel nhận dạng được, mô tả về từng kiểu dữ liệu, cách thức đối số hoặc giá trị trả về được truyền và khai báo thông thường cho kiểu dữ liệu trong ngôn ngữ lập trình C.

Mã

Mô tả

Truyền theo

C Khai báo

A

Logic
(FALSE = 0), TRUE = 1)

Giá trị

số nguyên ngắn

B

Số dấu phẩy động 8-byte IEEE

Giá trị
(Windows)

Tham chiếu (Macintosh)

kép
(Windows)

kép* (Macintosh)

C

Chuỗi kết thúc bằng giá trị null (độ dài tối đa của chuỗi = 255)

Tham chiếu

char *

D

Chuỗi đếm byte (byte đầu tiên có chứa độ dài của chuỗi, độ dài tối đa của chuỗi = 255 ký tự)

Tham chiếu

Ký tự không dấu *

E

Số dấu phẩy động 8-byte IEEE

Tham chiếu

kép *

F

Chuỗi kết thúc bằng giá trị null (độ dài tối đa của chuỗi = 255 ký tự)

Tham chiếu (thay đổi tại chỗ)

char *

G

Chuỗi đếm byte (byte đầu tiên có chứa độ dài của chuỗi, độ dài tối đa của chuỗi = 255 ký tự)

Tham chiếu (thay đổi tại chỗ)

ký tự không dấu *

H

Số nguyên 2 byte không dấu

Giá trị

số nguyên ngắn không dấu

I

Số nguyên 2 byte có dấu

Giá trị

số nguyên ngắn

J

Số nguyên 4 byte có dấu

Giá trị

số nguyên dài

K

Mảng

Tham chiếu

FP *

L

Logic
(FALSE = 0, TRUE = 1)

Tham chiếu

số nguyên ngắn *

M

Số nguyên 2 byte có dấu

Tham chiếu

số nguyên ngắn *

N

Số nguyên 4 byte có dấu

Tham chiếu

số nguyên dài *

O

Mảng

Tham chiếu

Ba đối số được truyền:
số nguyên ngắn không dấu *
số nguyên ngắn không dấu*
kép [ ]

P

Cấu trúc dữ liệu OPER Microsoft Excel

Tham chiếu

OPER *

R

Cấu trúc dữ liệu XLOPER Microsoft Excel

Tham chiếu

XLOPER *

Đầu Trang

Chú thích

  • Khai báo ngôn ngữ C căn cứ trên giả định là trình biên dịch của bạn mặc định là 8 byte kép, số nguyên ngắn 2 byte và số nguyên dài 4 byte.

  • Trong môi trường lập trình Microsoft Windows, tất cả các con trỏ đều là các con trỏ xa. Ví dụ: bạn phải khai báo mã kiểu dữ liệu D là unsigned char far * trong Microsoft Windows.

  • Tất cả các hàm trong các DLL và nguồn mã đều được gọi bằng quy ước gọi Pascal. Hầu hết các trình biên dịch C cho phép bạn dùng quy ước gọi Pascal bằng cách thêm từ khóa Pascal vào khai báo của hàm, như được minh họa trong ví dụ sau đây: pascal void main (rows,columns,a)

  • Nếu một hàm dùng kiểu dữ liệu truyền theo tham chiếu cho giá trị trả về của nó, bạn có thể truyền một con trỏ làm giá trị trả về. Microsoft Excel sẽ biên dịch con trỏ null là giá trị lỗi #NUM! .

Đầu Trang

Thông tin về Kiểu Dữ liệu Bổ sung

Phần này bao gồm những thông tin chi tiết về các kiểu dữ liệu F, G, K, O, P và R cùng các thông tin khác về đối số kiểu văn bản.

Kiểu Dữ liệu F và G

Với kiểu dữ liệu F và G, một hàm có thể thay đổi một vùng đệm của chuỗi do Microsoft Excel định phần. Nếu mã kiểu giá trị trả về là F hoặc G, Microsoft Excel sẽ bỏ qua giá trị do hàm trả về. Thay vào đó, Microsoft Excel sẽ tìm kiếm danh sách bao gồm các đối số của hàm để lấy kiểu dữ liệu tương ứng đầu tiên (F hoặc G) và sau đó nhận các nội dung hiện tại trong vùng đệm của chuỗi làm giá trị trả về. Microsoft Excel phân bổ 256 byte cho đối số, vì vậy hàm có thể trả về một chuỗi lớn hơn mà nó đã nhận.

Đầu Trang

Kiểu Dữ liệu K

Kiểu dữ liệu K dùng một con trỏ trỏ tới một cấu trúc FP có kích thước biến đổi. Bạn phải xác định cấu trúc này trong DLL hoặc nguồn mã như sau:

typedef struct _FP
{
unsigned short int rows;
unsigned short int columns;
double array[1]; /* Actually, array[rows][columns] */
} FP;

Khai báo double array[1] chỉ cấp chỗ lưu trữ cho một mảng phần tử đơn. Số các phần tử trong mảng thực bằng với số hàng nhân với số cột.

Đầu Trang

Kiểu Dữ liệu O

Chỉ dùng kiểu dữ liệu O làm đối số, không dùng làm một giá trị trả về. Kiểu dữ liệu này truyền ba phần tử: một con trỏ trỏ tới số hàng trong một mảng, một con trỏ trỏ tới số cột trong một mảng và một con trỏ trỏ tới một mảng hai chiều bao gồm các số dấu phẩy động.

Thay vì trả về một giá trị, một hàm có thể thay đổi một mảng do kiểu dữ liệu O truyền tới. Để thực hiện điều này, bạn có thể dùng ">O" làm đối số kiểu văn bản. Để biết thêm thông tin, hãy xem phần "Thay đổi Tại chỗ — Hàm được khai báo là Rỗng" bên dưới.

Kiểu dữ liệu O được tạo ra để tương thích trực tiếp với các Fortran DLL, vốn truyền các đối số theo tham chiếu.

Đầu Trang

Kiểu Dữ liệu P

Kiểu dữ liệu P là một con trỏ trỏ tới một cấu trúc OPER. Cấu trúc OPER có chứa dữ liệu 8 byte, theo sau là mã định danh 2 byte nhằm xác định kiểu dữ liệu. Với kiểu dữ liệu P, một hàm DLL hoặc một mã nguồn có thể nhận và trả về mọi kiểu dữ liệu Microsoft Excel.

Cấu trúc OPER được xác định như sau:

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;

Trường kiểu có chứa một trong số những giá trị này.

Kiểu

Mô tả

Trường Val sẽ dùng

1

Số

num

2

Chuỗi (byte đầu tiên có chứa độ dài chuỗi)

str

4

Boolean (logic)

bool

16

Lỗi: các giá trị lỗi là:

0#NULL!

7#DIV/0!

15#Value!

23#REF!

29#NAME?

36#NUM!

42#N/A

err

64

Mảng

array

128

Đối số thiếu

256

Ô rỗng

Chỉ có thể dùng hai giá trị cuối cùng làm các đối số, không dùng làm giá trị trả về. Giá trị đối số thiếu (128) được truyền đi khi hàm gọi bỏ qua một đối số. Giá trị ô rỗng (256) được truyền đi khi hàm gọi truyền một tham chiếu tới một ô rỗng.

Đầu Trang

Kiểu Dữ liệu R — Gọi các hàm Microsoft Excel từ các DLL

Kiểu dữ liệu R là một con trỏ trỏ tới một cấu trúc XLOPER, vốn là một phiên bản nâng cao của cấu trúc OPER. Ở phiên bản Microsoft Excel 4.0 và các phiên bản sau đó, bạn có thể dùng kiểu dữ liệu R để viết các hàm DLL và các nguồn mã gọi được các hàm Microsoft Excel. Với cấu trúc XLOPER, một hàm DLL có thể truyền các tham chiếu trang tính và thực thi điều khiển dòng, ngoài dữ liệu truyền ra. Mô tả đầy đủ về kiểu dữ liệu R và giao diện lập trình ứng dụng (API) Microsoft Excel không nằm trong phạm vi của chủ đề này. Trong Hướng dẫn của Nhà phát triển Microsoft Office XP có bao gồm các thông tin chi tiết về kiểu dữ liệu R, API Microsoft Excel và rất nhiều phương diện kỹ thuật về Microsoft Excel.

Đầu Trang

Hàm Biến đổi và Tính toán lại

Microsoft Excel thường tính toán một hàm DLL (hoặc một nguồn mã) chỉ khi chúng được nhập vào một ô, khi một trong những thay đổi thuộc ô giá trị chính của chúng hoặc khi ô đó được tính toán trong thời gian một macro chạy. Trên một trang tính, bạn có thể tạo một hàm DLL hoặc một nguồn mã biến đổi, điều này có nghĩa là nó sẽ tính toán lại mỗi lần trang tính tính toán lại. Để tạo một hàm biến đổi, hãy thêm một dấu than (!) làm ký tự cuối trong đối số kiểu văn bản.

Ví dụ: trong Microsoft Excel dùng cho Windows, công thức của trang tính sau đây sẽ tính toán lại mỗi lần trang tính tính toán lại:

CALL("Kernel32";"GetTickCount";"J!")

Đầu Trang

Thay đổi tại Chỗ — Các Hàm được Khai báo dưới dạng Rỗng

Bạn có thể dùng chữ số đơn n cho mã kiểu trả về trong kiểu văn bản, trong đó n là một số từ 1 đến 9. Khai báo này sẽ lệnh cho Microsoft Excel thay đổi biến tại vị trí được đối số thứ n trỏ tới trong kiểu văn bản, thay vì trả về một giá trị. Khai báo này còn được gọi là thay đổi tại chỗ. Đối số thứ n phải là một kiểu dữ liệu truyền theo tham chiếu (C, D, E, F, G, K, L, M, N, O, P hoặc R). Hàm DLL hoặc nguồn mã cũng phải được khai báo bằng từ khóa rỗng trong ngôn ngữ C (hoặc từ khóa thủ tục trong ngôn ngữ Pascal).

Ví dụ: một hàm DLL nhận một chuỗi kết thúc bằng giá trị null và hai con trỏ trỏ tới các số nguyên làm các đối số có thể thay đổi chuỗi tại chỗ. Dùng "1FMM" làm đối số kiểu văn bản và khai báo hàm là rỗng.

Các phiên bản trước Microsoft Excel 4.0 đã dùng ký tự > để thay đổi tại chỗ đối số đầu tiên; không có cách nào để thay đổi mọi đối số ngoài đối số đầu tiên. Ký tự > tương đương với n = 1 trong phiên bản Microsoft Excel 4.0 và các phiên bản sau đó.

Đầu Trang

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Người dùng nội bộ Office

Thông tin này có hữu ích không?

Cảm ơn phản hồi của bạn!

Cảm ơn bạn đã phản hồi! Để trợ giúp tốt hơn, có lẽ chúng tôi sẽ kết nối bạn với một trong những nhân viên hỗ trợ Office của chúng tôi.

×