Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в VBA.doc
Скачиваний:
0
Добавлен:
07.01.2020
Размер:
2.27 Mб
Скачать
    1. Сохранение процедуры

Чтобы сохранить новую процедуру, надо сохранить рабочую книгу, где находится эта процедура. Можно сохранить рабочую книгу из редактора Visual Basic. Для этого нужно:

  1. выполнить команду File > Save Книга (Файл > Сохранить книгу). Если рабочая книга еще ни разу не сохранялась, дать ей имя;

  2. ввести Первая в качестве имени книги и нажать клавишу Enter.

Рабочая книга, модуль и процедура будут сохранены.

    1. Запись последовательности действий пользователя

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

Пример

Создать макрос, используя запись последовательности действий пользователя, для решения следующей задачи.

При работе в Excel необходимо часто вводить на рабочий лист наименование и “шапку” таблицы, приведённой ниже.

Для этого нужно выполнить следудующие действия:

  1. Выделить блок ячеек A1:D1.

  2. Объединить ячейки блока.

  3. Ввести наименование таблицы (слово ВЕДОМОСТЬ) шрифтом.

  4. Ввести шапку таблицы (Фамилия И.О., №зач.кн., Дисциплина, Оценка).

  5. Обвести рамкой каждую ячейку шапки таблицы.

Порядок записи макроса следующий.

  1. Открыть новую рабочую книгу.

  2. Выполнить команду Сервис > Макрос > Начать запись. Появится диалоговое окно Запись макроса, показанное ниже.

  1. Ввести название макроса, например ВЕДОМОСТЬ_1, и щёлкнуть кнопку OK.

  2. Выполнить действия по формированию заголовка и шапки таблицы, перечисленные выше в п.п. 1÷5

  3. Щёлкнуть на кнопке Остановить запись одноименной панели инструментов. Сеанс записи макроса закончен.

Обычно (но не всегда!) на экране появляется панель инструментов Остановить запись.

Если эта панель не появилась, то нужно щёлкнуть правой кнопкой мыши на любой панели инструментов и в открывшемся контекстном меню панели выбрать команду Настройка, а затем в одноименном диалоговом окне в списке Панели инструментов установить флажок возле пункта Остановить запись. Как альтернативу можно выполнить команду Сервис > Макрос > Остановить макрос.

Для выполнения макроса необходимо выполнить команду Сервис > Макрос > Макросы. Отобразится диалоговое окно Макрос. Выделить макрос ВЕДОМОСТЬ_1 и щёлкнуть на кнопке Выполнить.

Можно также выполнить макрос из окна редактора VBA, используя команду Run Sub|UserForm из меню Run или щелкнуть на кнопке Run Sub|UserForm стандартной панели инструментов или нажать клавишу F5.

    1. Просмотр кода макроса

По ходу записи макроса Excel запоминает действия пользователя и одновременно преобразует их в код VBA. Чтобы увидеть полученный код, нужно выполнить следующие действия.

  1. Выберать команду Сервис > Макрос > Макросы. Отобразится диалоговое окно Макрос.

  2. Выделите макрос ВЕДОМОСТЬ_1 и щёлкнуть на кнопке Изменить. Откроется окно редактора Microsoft Visual Basic, в котором отобразится код этого макроса.

Sub ВЕДОМОСТЬ_1()

'

' ВЕДОМОСТЬ_1 Макрос

' Макрос записан 15.06.2009 (VAM)

'

Range("A1:D1").Select

With Selection

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlBottom

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

Selection.Merge

Range("A1:D1").Select

ActiveCell.FormulaR1C1 = "ВЕДОМОСТЬ"

With ActiveCell.Characters(Start:=1, Length:=9).Font

.Name = "Arial Cyr"

.FontStyle = "полужирный"

.Size = 12

.Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic

End With

Range("A2").Select

ActiveCell.FormulaR1C1 = "Фамилия И.О."

Range("B2").Select

ActiveCell.FormulaR1C1 = "№зач.кн."

Range("C2").Select

ActiveCell.FormulaR1C1 = "Дисциплина"

Range("D2").Select

ActiveCell.FormulaR1C1 = "Оценка"

Range("A2:D2").Select

Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Selection.Borders(xlDiagonalUp).LineStyle = xlNone

With Selection.Borders(xlEdgeLeft)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

With Selection.Borders(xlEdgeTop)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

With Selection.Borders(xlEdgeBottom)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

With Selection.Borders(xlEdgeRight)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

With Selection.Borders(xlInsideVertical)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

End Sub

Количество строк в коде макроса не соответствует тому незначительному количеству действий, которые совершены при записи макроса. Дело в том, что хотя устанавливался только формат шрифта и вид рамки ячеек, в коде макроса сохранена вся информация, представленная кнопкой Ж выбора шрифта панели инструментов и характеристикой границы ячеек. Кроме того, здесь используется относительная адресация ячеек, для которой необходимо выделять ячейки.

В приведённом ниже макросе ВЕДОМОСТЬ_2 удалена вся лишняя информация и изменён способ адресации ячеек, что привело к значительному уменьшению макроса и увеличению его наглядности. Это оказалось проще, чем разрабатывать макрос на пустом месте.

Sub ВЕДОМОСТЬ_2()

'

' ВЕДОМОСТЬ Макрос

' Макрос записан 15.06.2009 (VAM)

Range("A1:D1").Select

Selection.HorizontalAlignment = xlCenter

Selection.Merge

ActiveCell.FormulaR1C1 = "ВЕДОМОСТЬ"

With ActiveCell.Characters(Start:=1, Length:=9).Font

.FontStyle = "полужирный"

End With

Range("A2") = "Фамилия И.О."

Range("B2") = "№Зач.кн."

Range("C2") = "Дисциплина"

Range("D2") = "Оценка"

Range("A2:D2").Select

Selection.Borders(xlEdgeLeft).Weight = xlThin

Selection.Borders(xlEdgeTop).Weight = xlThin

Selection.Borders(xlEdgeBottom).Weight = xlThin

Selection.Borders(xlEdgeRight).Weight = xlThin

Selection.Borders(xlInsideVertical).Weight = xlThin

End Sub