Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Редактор VBA. Отладка программ. Пошаговое выполнение программы
Похожие статьи вашей тематики
Цель работы: получить навыки отладки программ.
Теоретическая часть
Любая программа, написанная даже квалифицированным программистом, содержит ошибки, которые выявляются и исправляются в процессе отладки программы. Кроме того, при работе с отлаженной программой пользователь может создать ситуацию, которая программой не обрабатывается корректно.
Как правило, отладка — это проверка работы и исправление ошибок программистом перед передачей проекта на тестирование.
Инструментарии отладки позволяет проконтролировать избранные участки кода приложения для локализации ошибки, выполняя приложение по шагам, останавливаясь в точках останова, дает возможность проверить значения переменных, свойств объектов и другую интересующую информацию и выяснить, таким образом, источник ошибки.
В набор инструментария отладки Visual Basic входят такие основные инструменты, как:
- панель инструментов Debug (Отладка) с кнопками команд для выполнения отладки приложения;
- окно Immediate (Непосредственное выполнение), предназначенное для непосредственного ввода команд, требующих немедленного выполнения;
- окно Watches (Наблюдение), предназначенное для просмотра значений выражений, включенных в список просмотра;
- окно Locals (Локальные), предназначенное для просмотра значений переменных;
- редактор кода со встроенными возможностями просмотра переменных, констант, свойств, выражений при отладке приложения в точках останова и пошаговом выполнении приложения;
- окно Call Stack (Стек вызовов) для просмотра вызванных, но незавершенных процедур.
Панель инструментов Debug активизируется при выборе из меню View (Вид) команды Toolbars (Панели инструментов), а затем значения Debug (Отладка).
На панели инструментов Debug находятся кнопки, обеспечивающие работу по отладке приложения. Назначение этих кнопок описано в таблице 3.6.
Таблица 3.6.
Кнопки панели инструментов Debug
Кнопка
| Название
| Назначение
|
| Start/Continue
(Продолжить)
| Запускает программу или продолжает ее выполнение после прерывания
|
| Break (Остановка)
| Вызывает прерывание программы в необходимом месте (без использования точек останова)
|
| End(Завершение)
| Завершает выполнение программы
|
| Toggle Breakpoint
(Установить точку останова)
| Устанавливает точку останова на текущей строке кода
|
| Step Into (Шаг с заходом в процедуры)
| Осуществляет пошаговое выполнение процедуры, включая также вызываемые ею процедуры
|
| Step Over (Шаг без захода в процедуры)
| Осуществляет пошаговое выполнение процедуры без трассировки вызываемых ею процедур
|
| Step Out (Шаг с выходом из процедуры)
| Выполняет пошаговое выполнение текущей процедуры до выхода из нее
|
| Locals Window (Окно Locals)
| Открывает диалоговое окно Locals для контроля значений переменных
|
| Immediate Window (Окно Immediate)
| Открывает окно Immediate для ввода и выполнения команд
|
| Watch Window (Окно Watch)
| Открывает диалоговое окно Watches для просмотра выражений, включенных в список наблюдения
|
| Quick Watch
(Быстрый просмотр)
| Открывает окно Quick Watch для просмотра выражения и значения, которое оно возвращает в данный момент в точке останова программы или на определенном шаге при пошаговом запуске программы
|
| Call Stack
(Стек вызовов)
| Открывает окно Call Stack, в котором представлен список выполняемых процедур
|
Оборудование, инструменты и приборы
ПЭВМ, программное обеспечение Microsoft Office (Excel 2007).
Варианты заданий
Найти ошибки и выполнить отладку программы, выданной преподавателем, согласно варианту заданий, приведенных в таблице 3.7.
Таблица 3.7
Варианты заданий
№
варианта
| Задание
|
|
| Синтакситеческие ошибки
|
|
Private Sub Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsqBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение таблицы 3.7
|
|
|
Private Sub Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Analiz a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение таблицы 3.7
|
|
|
Private Sub Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Elze
If x < y Then 'Вложенный оператор
r = y
Elze
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение таблицы 3.7
|
|
|
Private Sub Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Tnen
r = x
Else
If x < y Tnen 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Анализ(BiVal x As Integer, BiVal y As Integer, _
BiRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Privat Sub Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sab Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sab
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Анализ(ByVal x As Inteqer, ByVal y As Inteqer, _
ByRef r As Inteqer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Inteqer, b As Inteqer, maximum2 As Inteqer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Анализ(ByVal x As Integer, ByVal y As Integer,
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Analiz(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CIht(Text1.Text)
b = CIht(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d = b ^ 2 - 4 * a * c
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / (2 * a): x2 = x1
TextBox4.Text = x1: TextBox5.Text = x2
Else
x1 = (-b - Sqr(d)) / (2 * a): x2 = (-b + Sqr(d)) / (2 * a)
TextBox4.Text = x1: TextBox5.Text = x2
End Sub
|
Продолжение табл. 3.7
|
| Ошибки при вводе - выводе данных
|
|
Private Sub Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(TextBox1.Text)
b = CInt(TextBox2.Text)
Анализ a, b, maximum2
TextBox3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ a, b, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Function F(ByVal x As Single) As Single
F = (x - 1) * (x - 1) - 1
End Function
Private Sub Расчет(ByVal xn As Single, ByVal xk As Single, _
ByVal e As Single, ByRef x As Variant)
Dim N As Integer, c As Single 'Объявление локальных переменных
Dim mas() 'Обьявление динамического массива
If F(xn) * F(xk) > 0 Then
x = "?"
MsgBox "На данном интервале корня нет или четное количество корней." _
+ Chr(13) & _
"Задайте интервал, содержащий один корень."
Exit Sub
End If
N = 0
c = (xn + xk) / 2
Do While xk - xn > e And Abs(F(c)) > e
c = (xn + xk) / 2
N = N + 1
ReDim Preserve mas(1 To N)
mas(N) = c
If F(xn) * F(c) > 0 Then xn = c Else xk = c
Loop
x = c
| Продолжение табл. 3.7
|
|
| If N = 0 Then
ReDim Preserve mas(1 To 1)
mas(1) = x
End If
List1.List = mas
End Sub
Private Sub CmdРешение_Click()
Dim a As Single, b As Single, eps As Single, _
корень As Variant
a = CSng(Text1.Text)
b = CSng(Text2.Text)
eps = CSng(Text3.Text)
Расчет a, b, eps, корень
Text4.Text = корень
End Sub
Private Sub List1_Click()
Text5.Text = F(CSng(List1))
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Поиск_мин_элем(_
ByRef b() As Single, _
ByVal jn As Integer, ByVal jk As Integer, _
ByRef jmin As Integer)
Dim j As Integer
jmin = jn
For j = jn + 1 To jk
If b(j) < b(jmin) Then jmin = j
Next
End Sub
Private Sub Перестановка(ByRef x As Single, _
ByRef y As Single)
Dim z As Single
z = x
x = y
y = z
End Sub
Private Sub CmdРешение_Click()
Dim n As Integer, imin As Integer, _
k As Integer, a() As Single
n = CInt(Text1.Text)
Randomize
|
Продолжение табл. 3.7
|
|
| For k = 1 To n
ReDim Preserve a(1 To k)
a(k) = Int(100 * Rnd)
Next
List1.List = a
For k = 1 To n - 1
Поиск_мин_элем a, k, n, imin
Перестановка a(k), a(imin)
Next
List2.List = a
End Sub
|
Продолжение табл. 3.7
|
| Ошибки при выполнении программы
|
|
Private Sub Анализ(ByVal x As Integer, ByVal y As Integer, _
ByRef r As Integer)
If x > y Then
r = x
Else
If x < y Then 'Вложенный оператор
r = y
Else
MsgBox "Числа равные" 'Блок из 2-х операторов
r = x
End If
End If
End Sub
Private Sub CmdРешение_Click()
Dim a As Integer, b As Integer, maximum2 As Integer
a = CInt(Text1.Text)
b = CInt(Text2.Text)
Анализ а, б, maximum2
Text3.Text = maximum2
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d = b ^ 2 - 4 * a * c
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / 2 * a: x2 = x1
TextBox4.Text = x1: TextBox5.Text = x2
Else
x1 = (-b - Sqr(d)) / 2 * a: x2 = (-b + Sqr(d)) / 2 * a
TextBox4.Text = x1: TextBox5.Text = x2
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d =Sqr(b ^ 2 - 4 * a * c)
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b /(2 * a): x2 = x1
TextBox4.Text = x1: TextBox5.Text = x2
Else
x1 = (-b - Sqr(d)) / (2 * a): x2 = (-b + Sqr(d)) /(2 * a)
TextBox4.Text = x1: TextBox5.Text = x2
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d =Sqr(b - 4 * a * c)
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / (2 * a): x2 = x1
TextBox4.Text = x1: TextBox5.Text = x2
Else
x1 = (-b - Sqr(d)) /(2 * a): x2 = (-b + Sqr(d)) / (2 * a)
TextBox4.Text = x1: TextBox5.Text = x2
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d = b - 4 * a * c
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / (2 * a): x2 = x1
TextBox4.Text = x1: TextBox5.Text = x2
Else
x1 = (-b - Sqr(d)) / (2 * a): x2 = (-b + Sqr(d)) / (2 * a)
TextBox4.Text = x1: TextBox5.Text = x2
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / (2 * a): x2 = x1
TextBox4.Text = x1: TextBox5.Text = x2
Else
x1 = (-b - Sqr(d)) / (2 * a): x2 = (-b + Sqr(d)) / (2 * a)
TextBox4.Text = x1: TextBox5.Text = x2
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d = b ^ 2 - 4 * a * c
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / (2 * a): x2 = x1
Else
x1 = (-b - Sqr(d)) / (2 * a): x2 = (-b + Sqr(d)) / (2 * a)
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d =Sqr(b ^ 2 - 4 * a * c)
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / 2 * a: x2 = x1
TextBox4.Text = x1: TextBox5.Text = x2
Else
x1 = (-b - Sqr(d)) / 2 * a: x2 = (-b + Sqr(d)) / 2 * a
TextBox4.Text = x1: TextBox5.Text = x2
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d = b - 4 * a * c
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / 2 * a: x2 = x1
TextBox4.Text = x1: TextBox5.Text = x2
Else
x1 = (-b - Sqr(d)) / 2 * a: x2 = (-b + Sqr(d)) / 2 * a
TextBox4.Text = x1: TextBox5.Text = x2
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / 2 * a: x2 = x1
TextBox4.Text = x1: TextBox5.Text = x2
Else
x1 = (-b - Sqr(d)) / 2 * a: x2 = (-b + Sqr(d)) / 2 * a
TextBox4.Text = x1: TextBox5.Text = x2
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d = b ^ 2 - 4 * a * c
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / 2 * a: x2 = x1
Else
x1 = (-b - Sqr(d)) / 2 * a: x2 = (-b + Sqr(d)) / 2 * a
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d = Sqr(b ^ 2 - 4 * a * c)
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / (2 * a): x2 = x1
Else
x1 = (-b - Sqr(d)) / (2 * a): x2 = (-b + Sqr(d)) / (2 * a)
End If
End If
End Sub
|
Продолжение табл. 3.7
|
|
|
Private Sub Реш_квадр_ур_Click()
Dim a As Integer, b As Integer, c As Integer, _
d As Single, x1 As Single, x2 As Single
a = CInt(TextBox1.Text): b = CInt(TextBox2.Text): c = CInt(TextBox3.Text)
d = b - 4 * a * c
If d < 0 Then
MsgBox "Нет веществ-х корней"
Else
If d = 0 Then
x1 = -b / (2 * a): x2 = x1
Else
x1 = (-b - Sqr(d)) / (2 * a): x2 = (-b + Sqr(d)) / (2 * a)
End If
End If
End Sub
|
Порядок выполнения работы
3. Ознакомиться с программной реализацией решения задачи поэлементного ввода 5-ти элементов числового массива и вычисления их суммы.
Dim a(1 To 5) As Integer, k As Integer
Private Sub CommandButton1_Click()
If k <= 5 Then
a(k) = CInt(TextBox2.Text)
k = k + 1
TextBox1.Text = k
TextBox2.Text = ""
End If
If k > 5 Then
TextBox1.Text = ""
CommandButton1.Enabled = False
CommandButton2.Enabled = True
End If
End Sub
Private Sub CommandButton2_Click()
Dim i As Integer, s As Integer
s = 0
For i = 1 To 5
s = s + a(i)
Next
TextBox3.Text = s
End Sub
Private Sub UserForm_Initialize()
k = 1
TextBox1.Text = k
End Sub
Пояснения.
В данной программе реализовано решение задачи поэлементного ввода (заполнения) 5-ти элементов числового массива и далее вычисление их суммы. При необходимой корректировке программы суммирование выполняется пошагово.
На форму помещены три текстовых поля и две командные кнопки.
В поле TextBox1 автоматически выводится номер заполняемого элемента массива. В поле TextBox2 необходимо набирать числовое значение для очередного элемента массива. Ввод набранного числа выполняется щелчком ЛКМ на активной командной кнопке с именем CommandButton1 и надписью «Заполнение очередного элемента массива».
В подпрограмме, связанной с первой командной кнопкой, имеется счетчик заполненных элементов массива. Очередной номер элемента массива выводится в поле TextBox1, а поле TextBox2 после ввода значения предыдущего элемента массива очищается выводом в это поле пустой символьной строки.
После ввода последнего пятого элемента массива оба первые текстовые поля очищаются, а первая командная кнопка перестает быть активной. Программно ее свойству Enabled (возможность использования) вместо первоначального значения True (истина) задается значение False (ложь). На форме первая командная кнопка становится бледной. В противоположность ей вторая командная кнопка с именем CommandButton2 и надписью «Вычисление суммы» становится яркой (активной), так как программно ее свойству Enabled вместо первоначального значения False задается на этом этапе выполнения программы значение True.
После щелчка ЛКМ на второй командной кнопке выполняется связанная с ней подпрограмма. В этой подпрограмме в цикле For…Next накапливается сумма значений элементов массива. В конце эта сумма выводится в третье текстовое поле.
Массив элементов и счетчик их количества объявлены в начале программного модуля. Этим они получили статус глобальных объектов программы, сохраняют свои значения после завершения выполнения подпрограммы, связанной с первой командной кнопкой, и могут быть использованы по ходу выполнения программы. Значение счетчика сохраняется при очередном выполнении подпрограммы заполнения массива, а заполненный массив сохраняется для использования в подпрограмме суммирования значений.
Начальное значение счетчика элементов массива задается и выводится в первое текстовое поле в подпрограмме, описание которой помещено в конец программного модуля. Имя этой подпрограммы отражает событие, при наступлении которого она выполняется. Это происходит сразу при запуске программы на выполнение, когда пользовательская форма (UserForm) инициализируется (наступает событие Initialize), т.е. становится активной.
4. Для пошагового выполнения программы на этапе суммирования значений элементов массива необходимо выполнить следующие действия:
- двойной щелчок ЛКМ на кнопке с надписью «Вычисление суммы». Результат: открытие соответствующей подпрограммы.
- щелчок ЛКМ на вертикальной полосе слева от строки s=0. Результат: установка точки останова.
- запуск программы на выполнение и заполнение элементов массива.
- щелчок ЛКМ на кнопке «Вычисление суммы». Результат: переход в режим прерывания на точке останова, возникновение на ней стрелки и подсветка строки s=0.
- выполнение команды Вид/Окно локальных переменных (View/Locals Window). В появившееся окно автоматически помещаются переменные i и s. Окно локальных переменных можно переместить вправо и вверх.
- в окне «Локальные переменные» можно открыть, щелкнув ЛКМ на «+» в строке «Ме», структуру данных, в которой имеется ответвление на глобальный массив чисел «а». После щелчка ЛКМ на «+» перед «а» открываются ветви со значениями элементов этого массива. Закрытие структуры – щелчок ЛКМ на “-“ перед «Ме».
- текущие значения элементов массива можно отображать на каждом шаге. Для этого надо выполнить еще команду Вид/Окно контрольного значения (View/Watch Window – окно слежения). После открытия этого дополнительного окна нужно щелкнуть в его поле ПКМ и выбрать щелчком ЛКМ пункт «Добавить контрольное значение» (Add Watch – дополнение к слежению). Далее в появившемся окне в поле ввода «Выражение» (“Expression”) нужно набрать a (i) и нажать кнопку «ОК».
- далее путем нажатия клавиши F8 осуществлять выполнение очередного шага. Результат: выполняемая строка текста подпрограммы подсвечивается, в окне «Локальные переменные» отображаются текущие значения переменных i и s, а в окне «Контрольные значения» отображаются очередные значения a(i). После выхода на конец подпрограммы окно локальных переменных очищается.
3. Окончание:
- щелчок ЛКМ на окне «Локальные переменные», обратное перемещение его влево и закрытие щелчком ЛКМ на кнопке «Закрыть»;
- аналогичное закрытие окна «Контрольные значения»;
- щелчок ЛКМ на кнопке «Сброс» («Reset», см. квадратик – 3-я кнопка после кнопки запуска программы на выполнение); результат: на заднем плане возникает окно формы;
- закрытие окна с кодом программы (на переднем плане остается исходное окно формы), можно снова запустить программу на выполнение с пункта 3 или завершить работу, закрыв все окна.
3. Завершить работу щелчком ЛКМ на пункте «Завершение сеанса <имя группы>».
Содержание отчета
Отчет должен содержать:
· номер, название и цель работы;
· краткую теоретическую часть, включающую описание трех групп ошибок, ситуаций перехода программы в режим прерывания, использования точек останова программы и действий для организации и пошагового выполнения программы;
· результаты выполнения работы согласно заданию, выданному преподавателем, а именно, текст составленных программ с пояснениями к ним, структуру окна формы задачи, описание действий по выполнению программ, результаты выполнения программы;
· заключение по работе.
Контрольные вопросы
1. Что такое отладка программы? Цель и основные этапы отладки.
2. Виды ошибок в программе?
3. Основные инструменты отладки в VBА?
|