Программа СлучайныеЧислаОформление
Модернизируем программу СлучайныеЧисла таким образом, чтобы ячейки со случайными числами были с пунктирными границами синего цвета, а сами числа были в начертании курсив. Новой программе присвоим имя СлучайныеЧислаОформление.
Этот фрагмент кода оптимально создать с помощью макрорекордера. После записи макроса и удаления строк с комментариями вы получите следующий макрос (представьте себе, сколько времени бы вам понадобилось, чтобы ввести его!):
1) | Sub Макрос1() |
2) | Range("A1:A10").Select |
3) | Selection.Font.Italic = True |
4) | Selection.Borders(xlDiagonalDown).LineStyle = xlNone |
5) | Selection.Borders(xlDiagonalUp).LineStyle = xlNone |
6) | With Selection.Borders(xlEdgeLeft) |
7) | .LineStyle = xlDot |
8) | .Weight = xlThin |
9) | .ColorIndex = 5 |
10) | End With |
11) | With Selection.Borders(xlEdgeTop) |
12) | .LineStyle = xlDot |
13) | .Weight = xlThin |
14) | .ColorIndex = 5 |
15) | End With |
16) | With Selection.Borders(xlEdgeBottom) |
17) | .LineStyle = xlDot |
18) | .Weight = xlThin |
19) | .ColorIndex = 5 |
20) | End With |
21) | With Selection.Borders(xlEdgeRight) |
22) | .LineStyle = xlDot |
23) | .Weight = xlThin |
24) | .ColorIndex = 5 |
25) | End With |
26) | With Selection.Borders(xlInsideVertical) |
27) | .LineStyle = xlDot |
28) | .Weight = xlThin |
29) | .ColorIndex = 5 |
30) | End With |
31) | With Selection.Borders(xlInsideHorizontal) |
32) | .LineStyle = xlDot |
33) | .Weight = xlThin |
34) | .ColorIndex = 5 |
35) | End With |
36) | Range("A1").Select |
37) | End Sub |
После работы макрорекордера желательно оставить только те строки, которые изменяют свойства объекта, установленные по умолчанию. В данном случае можно убрать 4–ю и 5-ю строки, а также строки, в которых прописана толщина границ[8] (т.е. строки 8, 13, 18, 23, 28 и 33) и внутренние вертикальные границы (строки 26 – 30).
Переименовав Макрос1 в Оформление, в результате получим следующий код:
1) | Sub Оформление() |
2) | Range("A1:A10").Select |
3) | Selection.Font.Italic = True |
4) | With Selection.Borders(xlEdgeLeft) |
5) | .LineStyle = xlDot |
6) | .ColorIndex = 5 |
7) | End With |
8) | With Selection.Borders(xlEdgeTop) |
9) | .LineStyle = xlDot |
10) | .ColorIndex = 5 |
11) | End With |
12) | With Selection.Borders(xlEdgeBottom) |
13) | .LineStyle = xlDot |
14) | .ColorIndex = 5 |
15) | End With |
16) | With Selection.Borders(xlEdgeRight) |
17) | .LineStyle = xlDot |
18) | .ColorIndex = 5 |
19) | End With |
20) | With Selection.Borders(xlInsideHorizontal) |
21) | .LineStyle = xlDot |
22) | .ColorIndex = 5 |
23) | End With |
24) | Range("A1").Select |
25) | End Sub |
Комментарии к программе:
1.Обратите внимание на 2-ю строку программы. В данном случае, когда границы диапазона известны, такая запись удобна. Предположим, что количество разыгрываемых чисел задает пользователь, т.е. нижняя граница известна, а верхняя – нет. Тогда эту команду можно записать, воспользовавшись свойством Cells:
Range(Cells(1,1),Cells(m,1)).Select
где m – количество разыгрываемых чисел – определяет номер последней строки.
В общем случае команда запишется так:
Range(Cells(n,q),Cells(m,p)).Select
где n и m – номера строк, а q и p – номера столбцов.
2.Предположим, что выделение блока ячеек нежелательно. Тогда вместо 2-й и 3-й строк можно записать одну команду:
Range("A1:A10").Font.Italic = True
Точно так же блок (4) – (7) можно записать в следующем виде[9]:
With Range("A1:A10").Borders(xlEdgeLeft)
.LineStyle = xlDot
.ColorIndex = 5
End With
3.Аналогично, ссылаясь на диапазон ячеек, можно указать лист, в котором он находится:
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
Задания:
1. Скопируйте программу СлучайныеЧисла и назовите её СлучайныеЧислаОформление. Вставьте строки (2) – (24) из программы Оформление после 11-й строки новой программы. Протестируйте полученный код.
2. Переименуйте Модуль2 – в Примеры. В модуле Примеры:
2.1. Напишите 2 программы (ИзменениеЗаголовкаExcel и ВозвратСтандартногоЗаголовка) , одна из которых изменяет заголовок Excel на заголовок «Розыгрыш случайных чисел», а вторая возвращает его стандартное значение
2.2. Оформите в виде программы СписокФайлов следующий код (вывод в таблицу списка файлов из папки C:\St):
Path = "C:\St" 'определяет папку
Файл = Dir(Path) 'возвращает имя первого файла
i = 1
While Файл <> "" 'см. 8.3 из курса лекций
Cells(i,2).Value = Файл
Файл = Dir
i = i + 1
Wend
2.3. Оформите в виде программы ЗаменитьФайл проверку наличия файла Случайные числа.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 |
2.4. Напишите программу ЗапросИмени, которая запрашивает Ваше имя:
и выводит следующие сообщения:
§ - если имя задано ("Светлана")
§ - если имя не задано.
Переменные
Примеры использования переменных присутствуют во всех программах данного практикума. Здесь же мы познакомимся поближе с объектными переменными и переменными пользовательского типа.
Объектные переменные
Как вы знаете, объектная переменная используется для ссылки на объект. Они объявляются и задаются немного иначе, чем остальные переменные. Ниже представлен фрагменте кода, в котором объектная переменная сначала объявляется, а затем ей присваивается значение: Range1- это первая ячейка первого листа.
Dim Range1 As Object
Set Range1 = Worksheets(1).Range("A1")
Предположим, что в программе Оформление из параграфа 2.3 (стр. 29) нам необходимо указывать «полный» адрес диапазона ячеек A1:A10. Очевидно, что программа окажется перегруженной и трудной для восприятия.
Sub ОформлениеПолнаяСсылка()
Workbooks("Случайные числа.xls"). _
WorkSheets("Случ. числа").Range("A1:A10").Font.Italic = True
With Workbooks("Случайные числа.xls"). _
WorkSheets("Случ. числа")Range("A1:A10"). _
Borders(xlEdgeLeft)
.LineStyle = xlDot
.ColorIndex = 5
End With
. . .
' на досуге можете ввести остальные команды! J
End Sub
Введя объектную переменную, мы существенно сократим программу, сделаем её простой и более наглядной. В следующем коде объектная переменная MyRange – это диапазон ячеек A1:A10, расположенный в книге Случайные числа.xls на листе Случ. числа:
1) | Sub ОформлениеОбъектнаяПеременная() |
2) | Dim MyRange As Object |
3) | SetMyRange = Workbooks("Случайные числа.xls"). _ WorkSheets("Случ. числа").Range("A1:A10") |
4) | MyRange.Font.Italic = True |
5) | With MyRange.Borders(xlEdgeLeft) |
6) | .LineStyle = xlDot |
7) | .ColorIndex = 5 |
8) | End With |
9) | With MyRange.Borders(xlEdgeTop) |
10) | .LineStyle = xlDot |
11) | .ColorIndex = 5 |
12) | End With |
13) | With MyRange.Borders(xlEdgeBottom) |
14) | .LineStyle = xlDot |
15) | .ColorIndex = 5 |
16) | End With |
17) | With MyRange.Borders(xlEdgeRight) |
18) | .LineStyle = xlDot |
19) | .ColorIndex = 5 |
20) | End With |
21) | With MyRange.Borders(xlInsideHorizontal) |
22) | .LineStyle = xlDot |
23) | .ColorIndex = 5 |
24) | End With |
25) | Range("A1").Select |
26) | End Sub |
Задания:
1. В Модуль3 наберите программу ОформлениеОбъектнаяПеременная.
2. На листе Случ. числа очистите форматы, активизируйте другую книгу и запустите программу ОформлениеОбъектнаяПеременная.