Программа СлучайныеЧислаОформление

Модернизируем программу СлучайныеЧисла таким образом, чтобы ячейки со случайными числами были с пунктирными границами синего цвета, а сами числа были в начертании курсив. Новой программе присвоим имя СлучайныеЧислаОформление.

Этот фрагмент кода оптимально создать с помощью макрорекордера. После записи макроса и удаления строк с комментариями вы получите следующий макрос (представьте себе, сколько времени бы вам понадобилось, чтобы ввести его!):

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. На листе Случ. числа очистите форматы, активизируйте другую книгу и запустите программу ОформлениеОбъектнаяПеременная.