ТОП 10:

Редактор 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А?

 

 







Последнее изменение этой страницы: 2016-08-15; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.29.190 (0.02 с.)