На этом шаге мы рассмотрим использование созданной DLL.
Переходим к использованию в Excel функций динамической библиотеки, созданной в Delphi. Для начала используем функцию GetDateDialog, которая будет по нажатию кнопки открывать диалоговое окно и вставлять дату в выделенную ячейку таблицы.
Вот исходный текст объявления функции и макроса (рисунок 1).
Declare Function GetDateDialog Lib "LibForOf.dll" () As Variant Private Sub CommandButton1_Click() Selection = GetDateDialog End Sub
Рис.1. Объявление функции и макроса
На рисунке представлен результат выполнения процедуры GetDateDialog.
Рис.2. Результат выполнения процедуры GetDateDialog
Очевидно, что такой способ выбора даты будет неудобен пользователю. Предложим второй вариант, когда диалог выбора даты будет открываться по двойному щелчку левой кнопки мыши в ячейке таблицы. Здесь мы используем стандартную процедуру отклика на двойной щелчок. В эту процедуру передается ссылка на объект Range, в который необходимо записать дату.
Вот исходный текст этой процедуры.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, _
Cancel As Boolean)
Target = GetDateDialog
Target.NumberFormat = "d mmmm, yyyy"
End Sub
Рис.3. Задание процедуры
Использование данной процедуры позволит отказаться от кнопки и сократит количество действий пользователя. Дополнительно в этой процедуре выполняется преобразование формата ячейки для обеспечения правильного отображения даты.
Рис.4. Результат выполнения процедуры
Рассмотрим использование процедуры GetSumInWords из состава динамической библиотеки LIBFOROF.DLL, которую мы создали для преобразования числового значения типа Currency в строковый эквивалент. В объявлении этой процедуры обратите внимание на описание ее параметров. Первый параметр объявляется с ключевым словом ByVal, указывающим на то, что этот параметр только передает и не возвращает данные. Второй параметр описан без ключевых слов, он возвращает строку - эквивалент значения первого параметра. В качестве второго параметра мы используем переменную st, которую декларируем непосредственно в теле функции SumInWords. В данном случае в модуле рабочей книги нам удобней использовать функцию, потому что ее можно будет применять в формулах Excel. Исходные тексты, представленные далее, дополняют сказанное.
Использование функции преобразования числа в строковый эквивалент.
Declare Function GetSumInWords Lib "LibForOf.dll" (ByVal cur As Currency, _ stroka As String) As Boolean Public Function SumInWords(cur As Currency) As String Dim st As String Call GetSumInWords(cur, st) SumInWords = st End Function
Рис.5. Описание и задание функции
После того как макрос записан и протестирован, переходим к его использованию. Для этого в ячейку F4 запишем формулу =SumInWords(A1). Эта формула позволит отображать в ячейке F4 строковый эквивалент числового значения, введенного в ячейку А1 (рисунок 6).
Рис.6. Преобразование числового значения в строковый эквивалент
На предыдущих шагах мы рассмотрели, как создавать и использовать динамические библиотеки в модулях документов MS Office. Были рассмотрены простые примеры, которые при желании можно выполнить и средствами языка Visual Basic. Но для экспорта и импорта информации в приложениях, созданных на базе Delphi, представленная информация весьма полезна.
Со следующего шага мы начнем знакомиться с автоматизацией Microsoft PowerPoint.