Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к экзамену ППП 2013.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
535.36 Кб
Скачать

14 Объекты и методы библиотеки Microsoft Scripting Runtime Library для работы с файловой системой.

Работа с файловой системой опирается на библиотеку Microsoft Scripting Runtime Library (файл Scrrun.dll): для использования этой библиотеки надо установить ссылку на нее в диалоговом окне Tools – References.

VBA позволяет обрабатывать файлы, работать с дисками, файловой системой средствами объектной файловой системы (File System Object Model, FSO).

 

Основными объектами FSO являются:

    FilesSystemObject

    File

    Drive (позволяет собрать разнообразную информацию о диске)

    TextStream

    Folder

    Dictionary

Создание объекта FileSystemObject с неявной ссылкой на Microsoft Scripting Runtime (без подлючения библиотеки, недостатком данного подхода является то, что переменные объявляются с типом Variant и поэтому в редакторе кода не будут отображаться в списке свойства и методы соответствующих объектов).

 

Sub CreateFileSystemObject1()

Dim fs As Variant

Set fs = CreateObject("Scripting.FileSystemObject")

Dim ts As Variant

Set ts = fs.CreateTextFile("c:\testfile1.txt", True)

ts.WriteLine ("Hello, FSO!")

ts.Close

End Sub

15 Подходы анализа возможных ошибок в ходе выполнения программы. Конструкции перехвата ошибок

Обработка ошибок и отладка программ

 Возможны два подхода:

  1. предотвращающий ошибки. Программно анализируются вводимые или вычисляемые данные и в случае, если они могут приводить к ошибке, обеспечивается, чтобы программа информировала пользователя о необходимости корректного задания данных;

Private sub cmdOK)Click()

Dim a,b,c as Double

If Not IsNumeric(txtA.Text) Then

MsgBox "Некорректный ввод значения a"

 txtA.SetFocus

Exit Sub

End If

 

If Not IsNumeric(txtB.Text) Then

MsgBox "Некорректный ввод значения b"

txtB.SetFocus

Exit Sub

End If

 

a = CDbl(txtA.Text)

b = CDbl(txtB.Text)

If b = 0 Then

MsgBox "Введен ноль"

txtB.SetFocus

Exit Sub

End If

с = a / b

txtC.Text = CStr(c)

End Sub

  1. обрабатывающий ошибки. В случае появления ошибки она перехватывается, обрабатывается и создается программный отклик на возникшую ошибку.

2.1. Оператор On Error

 Оператор on Error производит перехват ошибки. Он устанавливает, что программа должна делать в случае появления ошибки. Допустимы следующие варианты синтаксиса:

  On Error GoTo line

Активизирует процедуру обработки ошибок, начало которой определяется обязательным параметром line.

Его значением может быть либо метка строки, либо номер строки.

   On Error Resume Next

Указывает, что при возникновении ошибки происходит передача управления на инструкцию, непосредственно следующую за инструкцией, где возникла ошибка.

   On Error GoTo 0

Отключает любой активизированный обработчик ошибок в текущей процедуре, таким образом, инструкция on Error Goto о отменяет действие ИНСТРУКЦИИ On Error Resume Next.

 

2.2 Процедура обработки ошибки

Процедура обработки ошибки определяет тип возникшей ошибки и устанавливает, что программа должна делать в зависимости от типа ошибки.

 

2.3. Оператор Resume

Обеспечивает процедуре возможность продолжить работу после обработки ошибки.

Допустимы три варианта синтаксиса этого оператора:

    Resume

После обработки ошибки управление передается той инструкции, в которой произошла ошибка.

  Resume Next

После обработки ошибки управление передается инструкции, следующей за инструкцией в которой произошла ошибка.

   Resume Line

После обработки ошибки управление передается инструкции, определенной параметром line. Значением этого параметра может быть любая метка строки или номер строки.

 

Пример:

Private Sub CommandButton1_Click()

Dim a As Double, b As Double, c As Double

 On Error GoTo errorHandler1

a = CDbl(TextBox1.Text)

On Error GoTo errorHandler2

b = CDbl(TextBox2.Text)

c = a / b

TextBox3.Text = CStr(c)

Exit Sub

 

errorHandler1:

MsgBox "Произошла ошибка: " & "-" & Err.Description

TextBox1.SetFocus

Exit Sub

 

errorHandler2:

Dim msg As String

Select Case Err.Number

    Case 6

    msg = "Переполнение"

    Case 11

    msg = "На ноль делить нельзя"

    Case 13

    msg = "Должно быть числа"

Case Else

    msg = "Непредвиденная ошибка"

End Select

MsgBox "Произошло ошибка: " & CStr(Err.Number) & "-" & _

Err.Description & vbCr & msg

TextBox2.SetFocus

Exit Sub

End Sub