Переходим к использованию в Excel функций динамической библиотеки,
созданной в Delphi. Для начала используем функцию GetDateDialog, кото-
рая будет по нажатию кнопки открывать диалоговое окно и вставлять дату
в выделенную ячейку таблицы.
Вот исходный текст объявления функции и макроса.
Использование функции ввода даты в ячейку листа рабочей книги
Declare Function GetDateDialog Lib "LibForOf.dll" () As Variant
Public Sub DateDialog()
Selection = GetDateDialog
End Sub
На рис. 18.2 представлен результат выполнения процедуры GetDateDialog.
Рис. 18.2. Открытие диалогового окна выбора даты
Очевидно, что такой способ выбора даты будет неудобен пользователю.
Предложим второй вариант, когда диалог выбора даты будет открываться по
двойному щелчку левой кнопки мыши в ячейке таблицы. Здесь мы исполь-
зуем стандартную процедуру отклика на двойной щелчок. В эту процедуру
передается ссылка на объект Range, в который необходимо записать дату.
Вот исходный текст этой процедуры.
Использование процедуры отклика на двойной щелчок
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range,
Cancel As Boolean)
Target = GetDateDialog
Target.NumberFormat = "d irmnmm, yyyy"
End Sub
Использование данной процедуры позволит отказаться от кнопки и сокра-
тит количество действий пользователя. Дополнительно в этой процедуре
выполняется преобразование формата ячейки для обеспечения правильного
отображения даты.
Рассмотрим использование процедуры GetSumlnWords из состава динами-
ческой библиотеки LIBFOROF.DLL, которую мы создали для преобразова-
ния числового значения типа Currency в строковый эквивалент. В объявле-
нии этой процедуры обратите внимание на описание ее параметров. Пер-
вый параметр объявляется с ключевым словом ByVal, указывающим на то,
что этот параметр только передает и не возвращает данные. Второй пара-
метр описан без ключевых слов, он возвращает строку — эквивалент значе-
ния первого параметра. В качестве второго параметра мы используем пере-
менную str_, которую декларируем непосредственно в теле функции
SumlnWords. В данном случае в модуле рабочей книги нам удобней исполь-
зовать функцию, потому что ее можно будет применять в формулах Excel.
Исходные тексты, представленные далее, дополняют сказанное.
Использование функции преобразования числа в строковый эквивалент
Declare Function GetSumlnWords Lib "LibForOf.dll" (ByVal cur As Currency,
stroka_ As String) As Boolean
Public Function SumlnWords(cur_ As Currency) As String
Dim str_ As String
Call GetSumlnWords(cur_, str_)
SumlnWords = str_
End Function
Рис. 18.3. Преобразование числового значения в строковый эквивалент
После того как макрос записан и протестирован, переходим к его использо-
ванию. Для этого в ячейку F1 запишем формулу =SumInWords(Al). Эта
формула позволит отображать в ячейке F1 строковый эквивалент числового
значения, введенного в ячейку А1 (рис. 18.3).
В данной главе мы рассмотрели, как создавать и использовать динамиче-
ские библиотеки в модулях документов MS Office. Были рассмотрены про-
стые примеры, которые при желании можно выполнить и средствами языка
Visual Basic. Но для экспорта и импорта информации в приложениях, соз-
данных на базе Delphi, представленная информация весьма полезна. |