Опубликован: 31.08.2006 | Доступ: свободный | Студентов: 3927 / 218 | Оценка: 4.14 / 3.89 | Длительность: 39:16:00
ISBN: 978-5-9570-0021-3
Лекция 14:

Автоматизация приложений Microsoft Office и управление процессами

Автоматизация Excel из Visual Basic

Чтобы использовать команды Excel в программе на Visual Basic, выполните следующие шаги. Так как эти шаги применимы и к другим приложениям, вы можете использовать эти рекомендации для встраивания в ваши собственные программы функциональности большинства приложений, поддерживающих Automation.

Шаг 1. С помощью команды Add Reference (Добавить ссылку), предоставляемой Visual Studio, добавьте в ваш проект необходимые ссылки на библиотеки объектов.

Шаг 2. Напишите программу на Visual Basic. В процедуре события, в которой вы планируете использовать Automation, используйте оператор Dim для объявления типа объектов Automation. Затем используйте функции CType и CreateObject для создания экземпляра этого объекта, как показано здесь:

Dim xlApp As Excel.Application
xlApp = CType(CreateObject("Excel.Application"), Excel.Application)

В Visual Basic 6 вы могли создавать для приложения переменную типа Object, а затем во время выполнения программы присвоить ей конкретный тип приложения. Эта техника присвоения переменной, называемая поздним связыванием, не рекомендуется для кода Visual Basic .NET. Переменные, которые хранят объекты Automation, должны получать требуемый тип при разработке и, таким образом, быть привязанными к данным при компиляции (так называемое раннее связывание), как показано выше. Функция CType при компиляции возвращает в переменную приложения конкретный тип приложения.

Шаг 3. Используйте в процедуре события методы и свойства объекта Automation, сверившись об их синтаксисе с Object Browser (Обозреватель объектов) или документацией по приложению. Следующий пример кода использует метод WorksheetFunction.Pmt из Excel:

Dim LoanPayment As Single
LoanPayment = xlApp.WorksheetFunction.Pmt _
(txtInterest.Text / 12, txtMonths.Text, txtPrincipal.Text)
MsgBox("Платеж за месяц " & _
Format(Abs(LoanPayment), "$#.##"), , "Закладная")

Шаг 4. Когда вы закончите использовать приложение, вызовите специальную команду для завершения этого приложения (если вы не хотите, чтобы оно продолжало работать). Например:

xlApp.Quit()

Эта команда Quit - тот же самый метод, о котором вы узнали с помощью Object Browser (Обозревателя объектов) из Visual Studio.

В следующем упражнении вы создадите приложение Visual Basic, которое для вычисления выплат процентов по закладной использует метод Pmt из Excel. Аргументы Pmt будут взяты из трех объектов текстового поля вашей формы. Программа будет написана полностью на Visual Basic с использованием функциональности Excel, предоставляемой через Automation.

Примечание. Необходимо, чтобы в вашей системе был установлен Excel 2002. Если у вас более ранняя версия Excel, то вы можете адаптировать этот код программы к ней, но это далеко не тривиальная задача. По этой причине я не рекомендую Automation для программ, которые будут широко распространяться - особенно среди пользователей, имеющих различные версии Office.

Создание калькулятора для выплат по закладной

  1. В среде разработки отобразите форму, если она еще не отображена.
  2. В верхней части формы с помощью элемента управления Label нарисуйте большую метку, предназначенную для названия вашей программы.
  3. Под этой меткой в правой части формы нарисуйте с помощью элемента управления TextBox три объекта текстового поля. Объекты текстового поля позволят ввести аргументы для функции Pmt.
  4. С помощью элемента управления Label рядом с каждым из объектов текстового поля нарисуйте по метке. Эти метки будут определять аргументы функции Pmt, чтобы помочь вам вводить их в нужном месте.
  5. Используйте элемент управления Button и нарисуйте кнопку в нижней части формы.
  6. Установите для объектов формы следующие свойства:

    Объект Свойство Установка
    Label1 Font Microsoft Sans Serif, Bold, 11 point
    Text "Вычисление выплат с помощью Excel"
    TextAlign MiddleCenter
    TextBox1 Name txtInterest
    Text пустой (empty)
    TextBox2 Name txtMonths
    Text пустой (empty)
    TextBox3 Name txtPrincipal
    Text пустой (empty)
    Label2 Text "Проценты"
    Label3 Text "Месяцы"
    Label4 Text "Основной долг"
    Button1 Name btnCalculate
    Text "Вычислить"
    Form1 Text "Закладная"

    Ваша форма должна выглядеть примерно так.


  7. Чтобы отобразить в Редакторе кода процедуру события btnCalculate_Click, сделайте двойной щелчок мышью на кнопке Вычислить.
  8. Для запуска команд Excel с помощью Automation и вычисления выплат по закладной введите следующий код программы:

    Dim xlApp As Excel.Application
    Dim LoanPayment As Single
    xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
    LoanPayment = xlApp.WorksheetFunction.Pmt _
    (txtInterest.Text / 12, txtMonths.Text, txtPrincipal.Text)
    MsgBox("Платеж за месяц " & _
    Format(Abs(LoanPayment), "$#.##"), , "Закладная")
    xlApp.Quit()

    Эта процедура события объявляет переменную с именем xlApp, имеющую тип Excel.Application, что теперь допустимо, так как вы создали ссылку на библиотеку объектов Microsoft Excel 10.0.

    Примечание. Если тип данных Excel.Application в Редакторе кода подчеркнут синей волнистой линией, то это, вероятно, означает, что вы забыли добавить ссылку или просто начали вводить этот код, не выполнив упражнение по Object Browser (Обозреватель объектов). Вернитесь назад и создайте ссылку на библиотеку прямо сейчас, используя команду Add Reference (Добавить ссылку) из меню Project (Проект).

    Затем эта процедура с помощью функций CreateObject и CType присваивает тип переменной xlApp и заставляет эту переменную работать, вызывая метод WorksheetFunction.Pmt из Excel. Три аргумента для метода Pmt берутся из трех объектов текстового поля в форме. Так как функция Pmt возвращает для выплат отрицательное значение, то для отображения этого числа как положительного с плавающей точкой я использовал функцию Abs (модуль) из класса System.Math библиотеки .NET Framework. (В Excel выплаты по займам обычно отображаются как отрицательные числа, но в форме Visual Basic выплаты обычно выглядят гораздо лучше, если они отображаются как положительные величины.) Заметьте, что если один из требуемых аргументов функции Pmt пропущен, процедура события выдаст сообщение об ошибке времени исполнения. (Вы знаете, как можно устранить этот недостаток с помощью структуры выбора или обработчика ошибок?)

    Наконец, процедура с помощью окна сообщения отображает выплаты по закладной, и закрывает приложение Excel с помощью метода Quit. В этом примере приложение Excel никогда не открывается, так что пользователь даже не узнает, что оно загружалось.

  9. Прокрутите код в Редакторе кода в самый верх, а затем введите следующий оператор программы:

    Imports System.Math

    Это объявление встроит в проект библиотеку классов System.Math и предоставит доступ к использованной нами функции Abs. (После того, как вы сделаете эту ссылку, метод Abs больше не будет подчеркнут синей волнистой линией, присутствие которой является визуальной подсказкой о том, что объект, метод или свойство не определено.)

Теперь, чтобы увидеть, как работает Excel Automation, запустите эту программу.

Жанболат Шаймерден
Жанболат Шаймерден

Можно ли выбирать язык для надписей и команд в среде разработки?

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Светлана Ведяева
Светлана Ведяева
Россия, Саратов