ПРЕДЛАГАЮ КОЛЛЕГАМVBA в приложении к Excel, Word и Power PointО.А. Житкова, Т.И. Панфилова
|
Строка программы |
Пункт алгоритма |
Public Sub CommandButton1_Click() |
Начало |
Dim k As Integer | 1a |
Dim Text As String | 1b |
Dim ZAGOLOVOK As Range | 1c |
Dim REZULTAT As Range | Эта часть для выполнения дополнительного задания |
k = ActiveDocument.Paragraphs.Count | 2 |
Text = "Количество абзацев в этом документе - " & k & "." | 3 |
ActiveDocument.Paragraphs(k).Range.InsertParagraphAfter | 4 |
ActiveDocument.Paragraphs(k + 1).Range.InsertBefore Text | 5 |
Set REZULTAT = ActiveDocument.Paragraphs(k + 1).Range With REZULTAT .Font.Name = "Arial" .Font.Size = 14 .Font.ColorIndex = wdDarkRed End With |
Эта часть для выполнения дополнительного задания |
Set ZAGOLOVOK = ActiveDocument.Range(Start:=0, End:=0) | 6 |
With ZAGOLOVOK | Начало структуры With |
.InsertBefore "Протоколы" | 7 |
.Font.Name = "Arial" | 8 |
.Font.Size = 24 | 8 |
.InsertParagraphAfter | 9 |
End With | Конец структуры With |
End Sub | Конец |
Практическая работа № 9–3 “Количество букв а (русских) в абзаце”
Эта практическая работа выполняется с тем же документом, что и работа № 9–2 (с документом, который состоит из нескольких абзацев). Задача заключается в том, чтобы программно определить номер абзаца, в котором будет происходить подсчет букв а; подсчитать их количество; в конце документа (или после абзаца, в котором происходил подсчет) вывести сообщение о количестве букв.
Порядок работы.
1. Вызвать панель элементов управления “Вид | Панели инструментов | Элементы управления”.
2. Подготовить кнопку на рабочем листе ниже текста “CommandButton2”.
3. Переименовать кнопку в “Количество букв а в абзаце”.
4. Придать кнопке формат обтекания по контуру, чтобы ее можно было перемещать по листу.
5. Выбрать в контекстно-зависимом меню этого объекта пункт “Исходный текст” или два раза щелкнуть по кнопке (мы попадем в редактор в режим написания программы).
Алгоритм выполнения задания следующий:
1. Объявить переменные:
a) b — строковая переменная для размещения в ней выбранного абзаца в документе;
b) k — переменная для хранения количества абзацев в документе;
c) dl — переменная для хранения длины абзаца;
d) Text — переменная для формирования текста-ответа о количестве символов а в абзаце;
e) Nab — переменная для ввода номера абзаца, в котором будет происходить подсчет;
f) I — переменная для организации цикла;
g) kol — переменная для подсчета символов а;
h) REZULTAT — переменная, которая определит область для вывода заголовка.
2. Ввести номер абзаца, используя диалоговое окно.
3. Определить количество абзацев в документе.
4. Проверить существование введенного номера абзаца и выдать сообщение об ошибке, если такого нет.
5. В переменную b занести текст всего абзаца.
6. Определить длину абзаца.
7. Организовать цикл по нахождению символа а.
8. Сформировать текст вывода сообщения.
9. Вставить дополнительный абзац после последнего абзаца документа для вывода сообщения.
10. Вывести текст-сообщение в подготовленный абзац.
11. Установить определенный шрифт, размер и цвет текста-сообщения.
Строка программы |
Пункт алгоритма |
Private Sub CommandButton2_Click() Начало программы |
Начало |
Dim b As String | 1a |
Dim k As Integer | 1b |
Dim dl As Long | 1c |
Dim Text As String | 1d |
Dim Nab As Integer | 1e |
Dim i As Long | 1f |
Dim REZULTAT As Range | 1g |
kol = 0 | |
Nab = InputBox("Введите номер абзаца", "Подсчитаем буквы а") | 2 |
k = ActiveDocument.Paragraphs.Count | 3 |
If Nab > k Then | 4 |
MsgBox "В тексте нет такого абзаца", 48, "Предупреждение" | 4 |
End | 4 |
End If | 4 |
b = ActiveDocument.Paragraphs(Nab).Range | 5 |
dl = Len(b) | 6 |
For i = 1 To dl | 7 |
If Mid(b, i, 1) = "а" Or Mid(b, i, 1) = "А" Then kol = kol + 1 | 7 |
Next i | 7 |
MsgBox kol | Отладочная печеть |
Text = "Количество букв а в абзаце с номером "& Nab & " - " & kol & "." | 8 |
ActiveDocument.Paragraphs(k).Range.InsertParagraphAfter | 9 |
Set REZULTAT = ActiveDocument.Paragraphs(k + 1).Range | |
With REZULTAT | |
.InsertBefore Text | 10 |
.Font.Name = "Arial" | 11 |
.Font.Size = 14 | 11 |
.Font.ColorIndex = wdDarkRed | 11 |
End With | |
End Sub | Конец программы |
Результат выполнения представлен на рисунке.
Практическая работа № 9–4 “Предложения в абзаце”
Эта практическая работа выполняется с тем же документом, что и работа № 9–2 и 9–3 (или с любым текстом, который состоит из нескольких абзацев). Задача заключается в том, чтобы программно определить номер абзаца, в котором наибольшее количество предложений; выделить сообщение о номере абзаца и о количестве предложений, используя диалоговое окно; выделить этот абзац другим цветом.
Порядок работы.
1. Вызвать панель элементов управления “Вид | Панели инструментов | Элементы управления”.
2. Подготовить кнопку “CommandButton3” на рабочем листе ниже текста.
3. Переименовать кнопку в “Предложения в абзаце”.
4. Придать ей формат обтекания по контуру, чтобы кнопку можно было перемещать по листу.
5. Выбрать в контекстно-зависимом меню этого объекта пункт “Исходный текст” или два раза щелкнуть по кнопке (попадаем в редактор в режим написания программы).
Алгоритм выполнения задания следующий:
1. Объявить переменные:
a) k — переменная для хранения количества абзацев в документе;
b) kol — переменная для хранения количества предложений в абзаце;
c) i — переменная для организации цикла;
d) Mas() — массив для занесения количества предложений в абзацах;
e) Otvet — переменная для формирования текста-ответа с результатами;
f) Max — переменная для хранения максимального количества предложений в абзаце;
g) ind — переменная для хранения номера абзаца с максимальным количеством предложений;
h) REZULTAT — переменная, которая определит область абзаца, к которому надо применить элементы форматирования.
При объявлении массива нам неизвестно количество абзацев в документе. Поэтому объявление массива производим в два этапа: 1-й этап — объявление без размера Dim Mas() As Integer; 2-й этап — после определения количества абзацев в документе переопределяем размерность массива ReDim Mas(k) As Integer. Такие массивы называются динамическими.
Кроме этого, чтобы индекс массива начинался с 1, а не с 0 (для удобства работы), в редакторе в начале листа с процедурой укажите команду “Option Base 1”.
2. Определить количество абзацев в документе.
3. Переопределить размерность массива.
4. Организовать цикл по определению количества предложений в абзацах с занесением их размерности в массив и сохранением порядкового номера в массиве, что соответствует номеру абзаца.
5. Организовать цикл по нахождению наибольшего количества предложений в абзаце (работа со сформированным массивом) по стандартному алгоритму.
6. Сформировать текст вывода сообщения.
7. Вывести в диалоговом окне сообщений результат.
8. Определить область абзаца для форматирования.
9. Установить определенный шрифт, размер и цвет текста-абзаца с максимальным количеством предложений.
Строка программы |
Пункт алгоритма |
Private Sub CommandButton3_Click() |
Начало программы |
Dim k As Integer | 1a |
Dim kol As Integer | 1b |
Dim i As Integer | 1c |
Dim Mas() As Integer | 1d |
Dim otvet As String | 1e |
Dim Max As Integer | 1f |
Dim ind As Byte | 1g |
Dim REZULTAT As Range | 1h |
kol = 0: k = 0 | Обнуление переменных |
k = ActiveDocument.Paragraphs.Count | 2 |
ReDim Mas(k) As Integer | 3 |
Rem Начало программы | Комментарий |
For i = 1 To k | 4 |
kol = ActiveDocument.Paragraphs(i).Range.Sentences.Count | 4 |
Mas(i) = kol | 4 |
Next i | 4 |
Max = Mas(1) | Подготовительная часть перед циклом |
ind = 1 | |
For i = 2 To k | Начало цикла |
If Mas(i) > Max Then | 5 |
Max = Mas(i) | 5 |
ind = i | 5 |
End If | 5 |
Next i | Конец цикла |
Rem Вывод результатов | Комментарий |
otvet = "Самое большое количество предложений в " & ind & " абзаце - " & Max |
6 |
MsgBox otvet | 7 |
Set REZULTAT = ActiveDocument.Paragraphs(ind).Range | 8 |
With REZULTAT | Начало структуры With |
.Font.Name = "Arial" | 9 |
.Font.Size = 12 | 9 |
.Font.ColorIndex = wdDarkRed | 9 |
End With | |
End Sub | Конец программы |
Диалоговое окно с результативным сообщением будет выглядеть так:
Результат выполнения задания представлен на рисунке.
Практическая работа № 9–5
“Слова-палиндромы”
Задача заключается в том, чтобы программно определить, есть ли в тексте слова-палиндромы и выделить эти слова другим цветом.
Порядок работы.
1. Подготовить текст (можно придумать рассказ или стихотворение со словами-палиндромами ШАЛАШ, КАЗАК, НАГАН, МАДАМ и т.д.).
2. Вызвать панель элементов управления “Вид | Панели инструментов | Элементы управления”.
3. Подготовить кнопку “CommandButton1” на рабочем листе ниже текста.
4. Переименовать кнопку в “Палиндромы”.
5. Придать созданной кнопке формат обтекания по контуру, чтобы ее можно было перемещать по листу.
6. Выбрать в контекстно-зависимом меню этого объекта пункт “Исходный текст” или два раза щелкнуть по кнопке.
Алгоритм выполнения задания следующий:
1. Объявить переменные:
a) Slovo — переменная для последовательного хранения выделенных слов;
b) L — переменная для хранения длины слова;
c) M — переменная, определяющая половину длины выделенного слова;
d) K — переменная для формирования 1-й половины слова;
e) D — переменная для формирования 2-й половины слова;
f) Kol — переменная для хранения количества абзацев в документе.
2. Определить количество абзацев в документе.
3. Определить область, в которой надо искать слова-палиндромы, — это все абзацы текста.
4. Организовать цикл по выделению слов в области определения.
5. Присвоить выделенное слово строковой переменой.
6. Определить длину выделенного слова.
7. Проверить длину слова. Если она равна 1, то слово проверять нет смысла.
8. Организовать цикл, чтобы определить, является ли слово палиндромом.
9. Изменить цвет букв у слова-палиндрома.
Строка программы |
Пункт алгоритма |
Private Sub CommandButton1_Click() |
Начало программы |
Dim slovo As String | 1a |
Dim L As Byte | 1b |
Dim M As Byte | 1c |
Dim K As String |
1d |
Dim D As String | 1e |
Dim kol as byte | 1f |
kol = ActiveDocument.Paragraphs.Count | 2 |
Set myRange = ActiveDocument.Range (ActiveDocument.Paragraphs(1).Range.Start, ActiveDocument.Paragraphs(kol).Range.End) |
3 |
For Each aword In myRange.Words | 4 (Начало внешнего цикла) |
slovo = aword.Text | 5 |
L = Len(slovo) | 6 |
If L <= 1 Then GoTo M1 | 7 |
M = Int(L / 2) | Подготовка к проверке на палиндром |
For I = 1 To M | 8 (Начало вложенного цикла) |
K = Mid$(slovo, I, 1) | 8 |
D = Mid$(slovo, L - I + 1, 1) | 8 |
If K <> D Then GoTo M1 | 8 |
Next I | 8 (Конец вложенного цикла) |
aword.Font.Size = 14 | 9 |
aword.Font.ColorIndex = wdDarkBlue | 9 |
M1: Next aword | 4 (Конец внешнего цикла) |
End Sub | Конец программы |
В результате ыполнения программы слова-пасиндромы будут ыделены синим цветом.
В приложении Power Point с помощью VBA можно автоматизировать множество задач. Рассмотрим применение пользовательских форм для проектирования тестов и различных задач в PowerPoint. Кроме того, имеется возможность не только ввести информацию, но и использовать элементы управления. Для этого требуется следовать двум простым правилам:
1. Макросы необходимо назначить кнопкам панелей инструментов.
2. Элементы управления необходимо разместить в диалоговых окнах.
Практическая работа № 10–1 “Умеешь ли ты считать”
Создайте презентацию, с помощью которой можно проверить и оценить навыки устного счета.
Порядок работы:
1. Открыть Power Point и создать титульный слайд; оформить на нем пять кнопок:
2. Записать программы вызова пользовательских форм (через контекстное меню “Исходный текст”, выделив тематические кнопки).
Тексты программ кнопок:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Private Sub CommandButton2_Click()
UserForm4.Show
End Sub
Private Sub CommandButton3_Click()
UserForm3.Show
End Sub
Private Sub CommandButton4_Click()
UserForm2.Show
End Sub
3. Настроить кнопку “Выход” на завершение показа.
4. Спроектировать в редакторе Visual Basic пользовательскую форму UserForm1 “Сложение и вычитание от 1 до 10”.
При проектировании формы Свойство Caption для меток Label сделать пустым; отформатировать все элементы.
Далее следует описать событийные процедуры при нажатии на кнопки.
Объявление глобальных переменных
Public a As Integer
Public b As Integer
Public R As Integer
Public v As Integer
Public n As Integer
Public f As Integer
Программа для кнопки “Далее”
Private Sub CommandButton1_Click()
' a — переменная для первого числа
' b — переменная для второго числа
' R — переменная для получения результата
' v, n — переменные для подсчета верных
' и неверных ответов
' f — переменная оператора выбора
f = f + 1
Select Case f
Case 1
' Присваиваем значения переменным
' a и b через RND в интервале (0;9)
b = Int(10 * Rnd())
a = Int(10 * Rnd())
' Формируем в надписях – или + и =
Label3.Caption = "-"
Label5.Caption = "="
Определяем большее из чисел, и это — первое число, меньшее — второе число:
If a > b Then
Label2.Caption = a
Label4.Caption = b
Else
Label2.Caption = b
Label4.Caption = a
End If
' Вычисляем результат
R = Abs(a - b)
Case 2
Сравниваем результат и вводимый ответ, подсчитываем количество
If Val(R) = Val(TextBox1) Then
v = v + 1
Label12.Caption = "Верно"
Else
n = n + 1
Label12.Caption = "Неверно"
End If
Case 3
CLS
Label12.Caption = ""
b = Int(10 * Rnd())
a = Int(10 * Rnd())
Label2.Caption = a
Label4.Caption = b
Label3.Caption = "+"
Label5.Caption = "="
R = a + b
Написать аналогичные программы для следующих 9 примеров.
' Проверка результата в примере 10
Case 20
If Val(R) = Val(TextBox1) Then
v = v + 1
Label12.Caption = "Верно"
Else
n = n + 1
Label12.Caption = "Неверно"
End If
' Вводим в надписи количество верных и неверных ответов, даем напутствия
Label7.Caption = "Ваш результат"
Label8.Caption = "Верно"
Label10.Caption = Str(v)
Label9.Caption = "Неверно"
Label11.Caption = Str(n)
If v = 10 Then Label12.Caption =
" Молодец!!!" Else Label12.Caption =
"Еще поработай над счетом!!!"
Case 21
UserForm1.Hide
End Select
End Sub
Программа кнопки “Снова”
Private Sub CommandButton2_Click()
Набираем программный код для кнопки снова (для этого щелкнем по кнопке)
CLS
'Обнуляем переменные, подсчитывающие
результат
n = 0
v = 0
'В надписях стираем информацию
Label10.Caption = ""
Label11.Caption = ""
Label12.Caption = ""
Label2.Caption = ""
Label4.Caption = ""
Label3.Caption = ""
Label5.Caption = ""
Label7.Caption = ""
Label8.Caption = ""
Label9.Caption = ""
f = 0
End Sub
Sub CLS()
TextBox1.Text = ""
End Sub
В рабочем состоянии форма выглядит так:
5. Спроектировать пользовательские формы UserForm2, UserForm3, UserForm4.
6. Записать программы в кнопках.
Вид формы UserForm2 “Сложение и вычитание от 1 до 200” может быть таким:
Примерный вид формы UserForm3 “Таблица умножения”:
А вот такой может быть форма UserForm4 “Посчитай”:
7. Проверить работоспособность проекта и сохранить работу.
Практическая работа № 10–2 “Тест на Визуальный Интеллект”
Создайте презентацию, с помощью которой можно проверить и оценить визуальный интеллект.
Порядок работы:
1. Открыть Power Point, создать титульный слайд.
2. Создать посредством панели элементов кнопку “Определи свой Визуальный Интеллект” и записать (через контекстное меню “Исходный текст”) программу вызова пользовательской формы UserForm1:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
3. Создать через панель рисования кнопку “Выход” и настроить ее на завершение показа.
4. Спроектировать в редакторе Visual Basic пользовательскую форму со следующими элементами управления:
Программа кнопки “Далее”
Public i As Integer
Public x As Integer
' Переменная х подсчитывает количество правильных ответов
Private Sub CommandButton1_Click()
i = i + 1
Select Case i
Case 1
' При первом нажатии на ДАЛЕЕ меняется надпись и рисунок
Label1.Caption = "Какая из фигур не соответствует общему ряду?"
UserForm1.Image1.Picture =
LoadPicture("C:\тест1.JPG")
Case 2
' При втором нажатии на ДАЛЕЕ подсчитывается правильный ответ, скидываются флажки в OptionButton и меняется рисунок
If OptionButton4.Value = True
Then x = x + 1
OptionButton1.Value = False
OptionButton2.Value = False
OptionButton3.Value = False
OptionButton4.Value = False
UserForm1.Image1.Picture =
LoadPicture("C:\тест2.jpg")
Case 3
' При третьем нажатии на ДАЛЕЕ подсчитывается правильный ответ, скидываются флажки в OptionButton и меняется рисунок
If OptionButton1.Value = True Then x = x + 1
OptionButton1.Value = False
OptionButton2.Value = False
OptionButton3.Value = False
OptionButton4.Value = False
UserForm1.Image1.Picture =
LoadPicture("C:\тест3.jpg")
Case 4
' При четвертом нажатии на ДАЛЕЕ подсчитывается правильный ответ, скидываются флажки в OptionButton и меняется рисунок
If OptionButton3.Value = True Then x = x + 1
OptionButton1.Value = False
OptionButton2.Value = False
OptionButton3.Value = False
OptionButton4.Value = False
UserForm1.Image1.Picture =
LoadPicture("C:\тест4.jpg")
Case 5
' При пятом нажатии на ДАЛЕЕ подсчитывается правильный ответ, скидываются флажки в OptionButton и меняется рисунок
If OptionButton3.Value = True Then x = x + 1
OptionButton1.Value = False
OptionButton2.Value = False
OptionButton3.Value = False
OptionButton4.Value = False
UserForm1.Image1.Picture =
LoadPicture("C:\тест5.jpg")
Case 6
' При шестом нажатии на ДАЛЕЕ подсчитывается правильный ответ, скидываются флажки в OptionButton и выдается результат
If OptionButton4.Value = True Then x = x + 1
OptionButton1.Value = False
OptionButton2.Value = False
OptionButton3.Value = False
OptionButton4.Value = False
Label1.Caption = "Ваша оценка " & x
Case 7
UserForm1.Hide
End Select
End Sub
Программа кнопки “Выход”
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
При нажатии на кнопку “Далее” форма будет выглядеть примерно так:
5. Выбрать рисунки-тесты.
6. Вывести результат после прохождения всех пяти вопросов.
Практическая работа № 10–3 “Твой соционический тип”
Создайте презентацию, с помощью которой можно определить соционический тип.
Порядок работы:
1. Спроектировать титульный слайд; предусмотреть кнопки вызова пользовательских форм для определения соционического типа: “экстраверт — интраверт”; “сенсорик — интуит”; “логик — этик”; “иррационал — рационал”; “выход”; “узнай свой социотип” (определяются все типы).
2. Спроектировать пользовательские формы для определения социотипа:
· разработать программы для кнопок перехода на пользователькие формы описания социотипов (справочные);
· создать “OptionButton” для выбора варианта ответа;
· создать кнопки “Далее” и “Выход”;
· предусмотреть переход на формы, которые содержат справочный материал;
· создать форму для определения социотипа;
· создать форму (вызываемую при нажатии на клавишу “Кто такой экстраверт?”), которая будет содержать справочный материал;
· предусмотреть подсчет ответов при нажатии на кнопку “Далее”; при последнем нажатии должен выдаваться результат: “Вы — ЛОГИК” и т.д.;
· предусмотреть после прохождения всех вопросов и ответов вызов формы, из которой, в свою очередь, можно попасть в таблицу отношений социотипов или совсем выйти из вопросника.
Дополнительные задания
Подберите материал для создания теста-вопросника. Это может быть:
· Тест по предмету:
· Тест для определения IQ:
· Тест для определения темперамента:
· Тест ШТУР (школьный тест умственного развития):
· Тест профессий и т.д.
Надеемся, что вам был полезен изложенный материал. Желаем успеха!