
- •1.Программирование в vba. Объекты Application, Workbook, Worksheet и Range
- •2.Редактор Visual Basic
- •2.1.Запуск программы
- •2.1.1.Панель инструментов Стандарт
- •2.2.Отладка программ
- •2.2.1.Ошибки при написании программ
- •2.2.1.1.Ошибки компиляции
- •2.2.1.2.Ошибки выполнения
- •2.2.2.Инструкция Option Explicit
- •2.2.3.Пошаговое выполнение программ
- •2.2.4.Точка останова (Toggle Breakpoint)
- •2.2.5.Отслеживание значений свойств и переменных
- •3.Объекты Application, Workbook, Worksheet и Range. Встроенные функции Dir, MkDir, MsgBox, InputBox
- •3.1.Программа СлучайныеЧисла
- •3.2.Программа УдалениеКниги
- •3.3.Программа СлучайныеЧислаОформление
- •4.Переменные
- •4.1.Объектные переменные
- •4.2.Пользовательский тип данных
- •5.Массивы
- •5.1.1.Функция Erase
- •5.1.2.Функции lBound и uBound
- •6.Подпрограммы. Функции. Область видимости переменных, подпрограмм и функций.
- •6.1.Вызов подпрограммы
- •6.2.Передача данных при вызове программы
- •6.2.1.Передача по ссылке и по значению
- •6.3.Функции
- •6.4.Область видимости переменных
- •6.4.1.Переменные уровня процедуры
- •6.4.2.Переменные уровня модуля
- •6.4.3.Переменные уровня проекта
- •6.4.4.Сохраняемые переменные
- •6.4.5.Область видимости подпрограмм и функций
- •6.4.6.Сохраняемые подпрограммы и функции
- •7.Управляющие структуры: If-Then-Else, Select Case, For-Next, While-Wend, Do-Loop, For-Each-Next
- •8.Инструкция With
- •9.Встроенные функции vba
- •9.1.Математические функции
- •9.2.Функции проверки типов
- •9.3.Функции преобразования форматов
- •9.4.Функции обработки строк
- •9.5.Функции времени и даты
- •10.Обработка ошибок: инструкция On Error
- •11.Пользовательский интерфейс
- •11.1.Создание формы (UserForm) и добавление кнопок (СоmmandButton)
- •11.2.Вывод формы на экран (запуск формы)
- •11.3.Поле (TextBox) и надпись (Label).
- •11.4.Список (ListBox) и поле со списком (ComboBox)
- •11.4.1.Список (ListBox)
- •11.4.2.Определение выбранных элементов списка
- •11.4.3.Поле со списком (ComboBox)
- •11.4.4.Определение выбранного элемента
- •11.4.5.Создание взаимосвязанных элементов управления
- •11.5.Флажок (CheckBox)
- •11.6.Выключатель (ToggleButton)
- •11.7.Переключатель (OptionButton)
- •11.8.Счетчик (SpinButton)
- •11.9.Создание нестандартных меню и панелей инструментов.
- •11.9.1.Пример создания/удаления панели инструментов
- •11.9.2.Пример создания/удаления меню
- •12.События объектов Workbook и Worksheet
- •12.1.События объекта Workbook
- •12.2.События объекта Worksheet
- •Домашнее задание №1
- •Домашнее задание №2 и №3. Типовые варианты.
- •Вариант 1. Домашнее задание №2
- •Списочный состав института
- •Домашнее задание №3
- •Вариант 2. Домашнее задание №2
- •Списочный состав института
- •Домашнее задание №3
- •Вариант 3. Домашнее задание №2
- •Домашнее задание №3
- •Вариант 4. Домашнее задание №2
- •Домашнее задание №3
- •Вариант 5. Домашнее задание №2
- •Домашнее задание №3
3.3.Программа СлучайныеЧислаОформление
Модернизируем программу СлучайныеЧисла таким образом, чтобы ячейки со случайными числами были с пунктирными границами синего цвета, а сами числа были в начертании курсив. Новой программе присвоим имя СлучайныеЧислаОформление.
Этот фрагмент кода оптимально создать с помощью макрорекордера. После записи макроса и удаления строк с комментариями вы получите следующий макрос (представьте себе, сколько времени бы вам понадобилось, чтобы ввести его!):
|
Sub Макрос1() |
|
Range("A1:A10").Select |
|
Selection.Font.Italic = True |
|
Selection.Borders(xlDiagonalDown).LineStyle = xlNone |
|
Selection.Borders(xlDiagonalUp).LineStyle = xlNone |
|
With Selection.Borders(xlEdgeLeft) |
|
.LineStyle = xlDot |
|
.Weight = xlThin |
|
.ColorIndex = 5 |
|
End With |
|
With Selection.Borders(xlEdgeTop) |
|
.LineStyle = xlDot |
|
.Weight = xlThin |
|
.ColorIndex = 5 |
|
End With |
|
With Selection.Borders(xlEdgeBottom) |
|
.LineStyle = xlDot |
|
.Weight = xlThin |
|
.ColorIndex = 5 |
|
End With |
|
With Selection.Borders(xlEdgeRight) |
|
.LineStyle = xlDot |
|
.Weight = xlThin |
|
.ColorIndex = 5 |
|
End With |
|
With Selection.Borders(xlInsideVertical) |
|
.LineStyle = xlDot |
|
.Weight = xlThin |
|
.ColorIndex = 5 |
|
End With |
|
With Selection.Borders(xlInsideHorizontal) |
|
.LineStyle = xlDot |
|
.Weight = xlThin |
|
.ColorIndex = 5 |
|
End With |
|
Range("A1").Select |
|
End Sub |
После работы макрорекордера желательно оставить только те строки, которые изменяют свойства объекта, установленные по умолчанию. В данном случае можно убрать 4–ю и 5-ю строки, а также строки, в которых прописана толщина границ8 (т.е. строки 8, 13, 18, 23, 28 и 33) и внутренние вертикальные границы (строки 26 – 30).
Переименовав Макрос1 в Оформление, в результате получим следующий код:
|
Sub Оформление() |
|
Range("A1:A10").Select |
|
Selection.Font.Italic = True |
|
With Selection.Borders(xlEdgeLeft) |
|
.LineStyle = xlDot |
|
.ColorIndex = 5 |
|
End With |
|
With Selection.Borders(xlEdgeTop) |
|
.LineStyle = xlDot |
|
.ColorIndex = 5 |
|
End With |
|
With Selection.Borders(xlEdgeBottom) |
|
.LineStyle = xlDot |
|
.ColorIndex = 5 |
|
End With |
|
With Selection.Borders(xlEdgeRight) |
|
.LineStyle = xlDot |
|
.ColorIndex = 5 |
|
End With |
|
With Selection.Borders(xlInsideHorizontal) |
|
.LineStyle = xlDot |
|
.ColorIndex = 5 |
|
End With |
|
Range("A1").Select |
|
End Sub |
Комментарии к программе:
Обратите внимание на 2-ю строку программы. В данном случае, когда границы диапазона известны, такая запись удобна. Предположим, что количество разыгрываемых чисел задает пользователь, т.е. нижняя граница известна, а верхняя – нет. Тогда эту команду можно записать, воспользовавшись свойством Cells:
Range(Cells(1,1),Cells(m,1)).Select
где m – количество разыгрываемых чисел – определяет номер последней строки.
В общем случае команда запишется так:
Range(Cells(n,q),Cells(m,p)).Select
где n и m – номера строк, а q и p – номера столбцов.
Предположим, что выделение блока ячеек нежелательно. Тогда вместо 2-й и 3-й строк можно записать одну команду:
Range("A1:A10").Font.Italic = True
Точно так же блок (4) – (7) можно записать в следующем виде9:
With Range("A1:A10").Borders(xlEdgeLeft)
.LineStyle = xlDot
.ColorIndex = 5
End With
Аналогично, ссылаясь на диапазон ячеек, можно указать лист, в котором он находится:
WorkSheets("Случ. числа").Range("A1:A10").Font.Italic _
= True
With WorkSheets("Случ. числа").Range("A1:A10"). _
Borders(xlEdgeLeft)
.LineStyle = xlDot
.ColorIndex = 5
End With
или книгу:
Workbooks("Случайные числа.xls"). _
WorkSheets("Случ. числа").Range("A1:A10").Font.Italic = True
With Workbooks("Случайные числа.xls"). _
WorkSheets("Случ. числа")Range("A1:A10"). _
Borders(xlEdgeLeft)
.LineStyle = xlDot
.ColorIndex = 5
End With
Задания:
Скопируйте программу СлучайныеЧисла и назовите её СлучайныеЧислаОформление. Вставьте строки (2) – (24) из программы Оформление после 11-й строки новой программы. Протестируйте полученный код.
Переименуйте Модуль2 – в Примеры. В модуле Примеры:
Напишите 2 программы (ИзменениеЗаголовкаExcel и ВозвратСтандартногоЗаголовка) , одна из которых изменяет заголовок Excel на заголовок «Розыгрыш случайных чисел», а вторая возвращает его стандартное значение
Оформите в виде программы СписокФайлов следующий код (вывод в таблицу списка файлов из папки C:\St):
Path = "C:\St" 'определяет папку
Файл = Dir(Path) 'возвращает имя первого файла
i = 1
While Файл <> "" 'см. 8.3 из курса лекций
Cells(i,2).Value = Файл
Файл = Dir
i = i + 1
Wend
Оформите в виде программы ЗаменитьФайл проверку наличия файла Случайные числа.xls и выведите диалог о его замене.
Path = "C:\St\Случайные числа.xls"
Filename = Dir(Path)
If Filename <> "" Then
'В переменной Сообщение задается структура диалогового
'окна:
Сообщение = vbYesNo + vbQuestion + vbDefaultButton1
'Выводит сообщение:
Кнопка = MsgBox(("Файл " & Filename & _
" уже существует. Заменить его?"), Сообщение)
Select Case Кнопка
Case vbYes
MsgBox "Нажата кнопка Да!"
Case vbNo
MsgBox "Нажата кнопка Нет!"
End Select
Else
MsgBox "Файл " & Filename & " не найден!"
End If
Напишите программу ЗапросИмени, которая запрашивает Ваше имя:
и выводит следующие сообщения:
- если имя задано ("Светлана")
- если имя не задано.