Важно
Внимание! Неправильное изменение реестра может серьезно повредить операционную систему и потребовать ее переустановки. Корпорация Майкрософт не гарантирует успешного устранения неполадок, вызванных ошибками при редактировании реестра. Перед изменением реестра сохраните архивные копии любых важных данных. Новейшие сведения об использовании и защите реестра вашего компьютера см. в справке Microsoft Windows.
В этой статье описаны синтаксис формулы и использование функций ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД в Microsoft Excel.
Примечание
Функции ВЫЗОВ и РЕГИСТР недоступны в Excel для Интернета.
В этой статье
Описание
Ниже описаны аргументы и типы возвращаемых значений функций ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД. Аргументы и возвращаемые значения зависят от операционной среды; эти различия отражены в таблице типов данных.
Типы данных
В функциях ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД аргумент "типы_данных" задает типы данных возвращаемых значений и всех аргументов для функции библиотеки DLL или кодового ресурса. Первый знак определяет тип данных возвращаемого значения. Остальные знаки указывают типы данных всех аргументов. Например, функция DLL, возвращающая число с плавающей запятой и принимающая целое число и число с плавающей запятой в качестве аргументов, требует в качестве аргумента "типы_данных" строку "BIB".
Приведенная ниже таблица содержит полный список кодов типов данных, распознаваемых Microsoft Excel, описание каждого типа данных и способ передачи значения, а также типичные объявления типов данных в языке программирования C.
| Код | Описание | Передается | Объявление в языке C |
|---|---|---|---|
| А | Логические (ЛОЖЬ = 0), ИСТИНА = 1) |
Значение | short int |
| B | 8-байтовое число с плавающей запятой | Value (Значение) (Windows) Ссылка (Макинтош) |
двухместный (Windows) double * (Макинтош) |
| C | Строка, заканчивающаяся кодом 0 (максимальная длина строки = 255) | Ссылка | char * |
| D | Строка со счетчиком байтов (первый байт содержит длину строки, максимальная длина строки = 255 знаков) | Ссылка | Unsigned char * |
| E | 8-байтовое число с плавающей запятой | Ссылка | double * |
| F | Строка, заканчивающаяся кодом 0 (максимальная длина строки = 255 знаков) | Ссылка (изменяется на месте) | char * |
| G | Строка со счетчиком байтов (первый байт содержит длину строки, максимальная длина строки = 255 знаков) | Ссылка (изменяется на месте) | unsigned char * |
| H | 2-байтовое беззнаковое целое | Значение | unsigned short int |
| I | 2-байтовое целое число со знаком | Значение | short int |
| J | 4-байтовое целое число со знаком | Значение | long int |
| K | Массив | Ссылка | FP * |
| L | Логические (ЛОЖЬ = 0, ИСТИНА = 1) |
Ссылка | short int * |
| M | 2-байтовое целое число со знаком | Ссылка | short int * |
| N | 4-байтовое целое число со знаком | Ссылка | long int * |
| O | Массив | Ссылка | Передаются три аргумента: unsigned short int * unsigned short int * двойной [ ] |
| P | Структура данных Microsoft Excel OPER | Ссылка | OPER * |
| R | Структура данных Microsoft Excel XLOPER | Ссылка | XLOPER * |
Замечания
- Объявления для языка C основаны на предположении, что компилятор использует по умолчанию 8 байт для хранения чисел с двойной точностью, 2 байта — для коротких целых и 4 — для длинных целых.
- В среде программирования Microsoft Windows все указатели являются дальними. Например, код типа данных D необходимо объявить в Microsoft Windows как
unsigned char far*. - При вызове всех функций в библиотеках DLL и кодовых ресурсах используются соглашения о вызове Pascal. Большинство компиляторов C позволяют использовать соглашение о вызове Pascal, добавляя ключевое слово Pascal в объявление функции, как показано в следующем примере:
pascal void main (rows,columns,a) - Если функция использует в качестве возвращаемого значения данные с передачей по ссылке, в качестве возвращаемого значения можно передать нулевой указатель. Microsoft Excel интерпретирует нулевой указатель как #NUM! (значение ошибки).
Дополнительные сведения о типах данных
Этот раздел содержит подробную информацию о типах данных F, G, K, O, P и R, а также другие сведения об аргументе "типы_данных".
Типы данных F и G
При работе с типами данных F и G функция может модифицировать буфер строки, выделенный приложением Microsoft Excel. Если код типа возвращаемого значения — F или G, значение, возвращаемое функцией, игнорируется. Вместо этого в списке аргументов функции выполняется поиск первого подходящего типа данных (F или G), и текущее содержимое выделенного буфера строки рассматривается как возвращаемое значение. В приложении Microsoft Excel для аргумента выделяется 256 байт, поэтому возвращаемая функцией строка может оказаться длиннее полученной.
Тип данных K
Тип данных K использует указатель на структуру FP, имеющую переменную длину. Необходимо следующим образом определить эту структуру в динамической библиотеке или программном ресурсе:
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. Для этого в качестве аргумента type_text можно использовать ">O". Дополнительные сведения см. в разделе "Изменение на месте — функции, объявленные пустыми" ниже.
Тип данных O был создан для обеспечения прямой совместимости с динамическими библиотеками Fortran, которые передают аргументы по ссылке.
Тип данных P
Тип данных P представляет собой указатель на структуру OPER. Структура OPER содержит 8 байт данных, за которыми следует 2-байтовый идентификатор, который определяет тип данных. При работе с типом данных 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#ПУСТО! 7#ДЕЛ/0! 15#ЗНАЧ! 23#ССЫЛ! 29#ИМЯ? 36#ЧИСЛО! 42#Н/Д |
err |
| 64 | Массив | массив |
| 128 | Пропущенный аргумент | |
| 256 | Пустая ячейка |
Последние два значения могут использоваться только как аргументы, но не как возвращаемые значения. Значение 128 (пропущенный аргумент) передается в том случае, если при вызове опущен какой-либо аргумент. Значение 256 (пустая ячейка) передается в случае ссылки на пустую ячейку при вызове функции.
Тип данных R — вызов функций Microsoft Excel из библиотек DLL
Тип данных R — это указатель на структуру XLOPER, которая является расширенной версией структуры OPER. В Microsoft Excel 4.0 и более поздних версиях приложения тип данных R можно использовать для создания библиотек DLL и ресурсов кода, которые вызывают функции Microsoft Excel. Используя структуру XLOPER, функции DLL могут передавать ссылки на лист и осуществлять не только передачу данных, но и управление потоком. Полное описание типа данных R и программного интерфейса приложения Microsoft Excel выходит за рамки данного раздела. Подробные сведения о типе данных R, программном интерфейсе Microsoft Excel и многих других технических аспектах этого приложения можно найти в пакете Руководство разработчика Microsoft Office XP.
Переменные функции и повторные вычисления
Microsoft Excel обычно вычисляет функцию из динамической библиотеки (или программный ресурс) тогда, когда она вводится в ячейку, когда изменяется одна из влияющих ячеек или когда ячейка вычисляется в процессе выполнения макроса. Можно сделать функцию DLL или программный ресурс на листе временными, то есть они будут вычисляться всякий раз, когда пересчитывается лист. Для этого в конец аргумента "типы_данных" надо добавить восклицательный знак (!).
Например, в Microsoft Excel для Windows приведенная ниже формула будет пересчитываться всякий раз, когда будет пересчитываться лист:
ВЫЗВАТЬ("Kernel32","GetTickCount","J!")
Изменение на месте — функции, объявленные как недействительные
В качестве типа возвращаемого значения в аргументе "типы_данных" можно использовать одну цифру n (от 1 до 9). Это указывает приложению Microsoft Excel на необходимость изменить переменную, указанную аргументом номер n в аргументе "типы_данных", а не возвращать значение. Этот прием иногда называют изменением на месте. Типом n-го аргумента должен быть тип, передаваемый по ссылке (C, D, E, F, G, K, L, M, N, O, P или R). Функция DLL или программный ресурс при работе с языком C должны быть объявлены с ключевым словом void (или, при программировании на языке Pascal, с ключевым словом procedure).
Например, функция DLL, которая получает строку, заканчивающуюся знаком 0, и два указателя на целые числа в качестве аргументов, может отредактировать строку на месте. Используйте "1FMM" в качестве аргумента "типы_данных" и объявите функцию как void.
В версиях, предшествовавших Microsoft Excel 4.0, этот > символ использовался для изменения первого аргумента; не было возможности изменить какой-либо другой аргумент, кроме первого. Этот > знак эквивалентен n = 1 в Microsoft Excel версии 4.0 и более поздних версиях.