Программа СлучайныеЧислаОформление
Модернизируем программу СлучайныеЧисла таким образом, чтобы ячейки со случайными числами были с пунктирными границами синего цвета, а сами числа были в начертании курсив. Новой программе присвоим имя СлучайныеЧислаОформление.
Этот фрагмент кода оптимально создать с помощью макрорекордера. После записи макроса и удаления строк с комментариями вы получите следующий макрос (представьте себе, сколько времени бы вам понадобилось, чтобы ввести его!):
| 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. На листе Случ. числа очистите форматы, активизируйте другую книгу и запустите программу ОформлениеОбъектнаяПеременная.