
1. Автоматический запуск Программы vba.
Теперь, когда появился законченный проект программы VBA, возникает вопрос как запускать программу минуя редактор VBA? Нужно сделать вызов нашей программы в момент открытия книги электронной таблицы, т.е. другими словами когда для объекта "Workbook" происходит событие "Workbook_Open" Нужно выполнить код (Рис.1):
Privite Sub Workbook_Open()
UserForm1.Show 'Вызов программы
End Sub
Рис. 1. Код вызова программы.
Добавляем код в нашу программу "RRasch23.xls"(Primer4.rar)как показано на Рис.1. Сохраняем изменения, закрываем всё и открыв файл "RRasch23.xls" смотрим на результат. Как это работает поясним на рис. 2:
Рис. 2 Схема автозапуска VBA приложения.
При открытии книги Excel выполняется автозапуск приложения VBA, которое открывается поверх окна Excel. При закрытии приложения VBA управление передаётся в Excel и электронную таблицу можно закрыть.
Нас интересует только панель нашей программы и книгу Excel таблицы можно и не показывать. Нет проблем. Делаем нашу книгу Excel таблицы невидимой, а при закрытии программы нужно закрывать и Excel. Как это сделать? Рассмотрим рис.3:
Рис. 2 Схема автозапуска VBA приложения с переводом Excel в фоновый режим.
В алгоритм работы нашей программы добавим команды : cкрыть Excel, cделать Excel видимым, закрыть Excel. При открытии приложения VBA Excel переводится в фоновый режим(делается невидимым). Когда нужно закрыть программу, то сначала Excel делаем видимым, а затем закрываем Excel(при выполнении данной команды закрывается и наша программа).
В программу внесём следующий код:
- для процедуры Private Sub UserForm_Initialize() добавим код
'******** ПЕРЕВОДИМ Excel в фоновый режим******** Application.Visible = False '************************************************
- добавить процедуру для выхода из программы вместе с Excel
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) '******** Сделать Excel видимым ******** Application.Visible = True Application.Quit '*************************************** End Sub
2. Взаимодействие приложения vba с ячейками Excel.
Программирование на VBA - это управления объектами приложения. Ячейки Вот и рассмотрим упрощённую структуру приложение Excel:
Application
WorkbookS
................... Workbook
WorksheetS
........................... Worksheet
Cell
..........
Excel приложение является объектом для VBA-программирования с именем- Application. В данный объект могут входить несколько книг -Workbook, объединённые в коллекцию Workbooks. Данный объект содержит все открытые объекты Workbook, а в книге находятся листы Worksheet, объединённые в коллекцию Worksheets. Коллекция Worksheets содержит по одному объекту Worksheet для каждого листа текущей книги. Листы разбиты на ячейки (Cell). При работе активными могут быть только одна книга и один лист.
Коллекции (WorkbookS, WorksheetS) имеют два важных метода и два свойства :
Add - добавить элемент в коллекцию;
Remove - удаляет элемент из коллекции;
Count - возвращает количество элементов в коллекции;
Item - возвращает элемент коллекции.
И так первым делом испытаем свойства Count и Item . Создаём Excel файл c именем "Test.xls" и открыв данный файл переходим в редактор VBA (alt+F11). Создаём форму. На форму добавим два элемента Label и установим свойства :
Label1
Наименование свойства |
Значение |
Name |
Label1 |
Caption |
Кол-во книг открыто: |
Lb1Kol1
Наименование свойства |
Значение |
Name |
Lb1Kol1 |
Caption |
0 |
SpecialEffect |
2- fmSpecialEffectSunken |
TextAlign |
3-fm TextAlignRight |
Для события инициализации формы напишем код :
Private Sub UserForm_Initialize()
Me.Width = 250 'Ширина формы
Me.Height = 100 'Высота формы
Me.Caption = "Test v.5.1." 'Заголовок формы
kol = Application.Workbooks.Count 'Определяем кол-во открытых книг
lblKol1.Caption = kol 'Вывод значения Kol на форму
End Sub
Самое главное в двух последних строчках - определяем количество открытых книг. Если перед запуском программы не было открытых книг, то при запуске должно быть одна открытая книга(см. рис.4). Для внесения ясности можно поэкспериментировать:
- Открыть какую ни будь книгу excel и запустить программу;
- Открыть две книги excel и запустить программу.
Рис. 4. Результат тестовой программы - открыта одна книга.