Шаг 233.
Использование созданной DLL

    На этом шаге мы рассмотрим использование созданной 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. Преобразование числового значения в строковый эквивалент

Текст этой книги вместе с сопутствующими файлами можно взять здесь (222,7 Кб).

    На предыдущих шагах мы рассмотрели, как создавать и использовать динамические библиотеки в модулях документов MS Office. Были рассмотрены простые примеры, которые при желании можно выполнить и средствами языка Visual Basic. Но для экспорта и импорта информации в приложениях, созданных на базе Delphi, представленная информация весьма полезна.

    Со следующего шага мы начнем знакомиться с автоматизацией Microsoft PowerPoint.




Предыдущий шаг Содержание Следующий шаг