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

6.3.5. Обработка ошибок vba

Для обработки ошибок в VBA есть специальный оператор On Error. Его задача – при возникновении ошибки передать управление в то место процедуры, где находится обработчик ошибки. Рассмотрим следующий пример:

Sub Test()

On Error GoTo Errors1

Dim x, a As Integer

Dim c As Double

x = 20

a = 0

c = x / a

MsgBox (" Этого не должно быть")

Exit Sub

Errors1:

MsgBox (x & " / " & a & " = Ух ты :(")

End Sub

В данном примере при возникновении ошибки управление передается по метке Errors1 и дальше выполняется код. Впрочем, прерывать процедуру из-за ошибки не всегда надо. Поэтому есть оператор Resume Next. Этот оператор реализует небезызвестный принцип «ни шагу назад». Выполнение пойдет дальше, несмотря на ошибку:

Sub Test()

On Error Resume Next

Dim x, a As Integer

Dim c As Double

x = 20

a = 0

c = x / a

MsgBox (" Этого не должно быть")

Exit Sub

Errors1:

MsgBox (x & " / " & a & " = Ух ты :(")

End Sub

Имеется четыре варианта оператора Resume: Resume Next, Resume строка, Resume метка, Resume 0. Следующий пример будет упорно требовать, чтобы ввели число, отличное от 0:

Sub Test()

Dim x, a As Integer

Dim c As Double

On Error GoTo Error1

x = 20

a = Str(InputBox("Введите число"))

c = x / a

x = 10

MsgBox ("Приплыли!!!")

GoTo Ends:

Error1:

MsgBox ("Думай о программировании, а не о каникулах :)")

a = Str(InputBox("Введите число"))

Resume 0

Ends:

End Sub

6.3.6. Чтение и запись текстовых файлов

Наверно можно смело утверждать, что умение читать и записывать информацию в текстовый файл – это основа импорта и экспорта. Практически любая серьезная программа, хранящая информацию, позволяет сохранить ее в текстовом формате, какое бы он расширение не имел. Открываются файлы оператором Open:

Sub Test()

Open "D:\Stud\1.txt" For Input As #1

Close #1

End Sub

Оператор Open может открывать файл для чтения Input и для записи Output. Цифра после ключевого слова As – это идентификатор файла. На его основании производится чтение и запись файла.

Следующий пример демонстрирует запись и чтение файла:

Sub Test()

Open "D:\Stud\1.txt" For Output As #1

Print #1, "Hello File"

Close #1

Open "D:\Stud\1.txt" For Input As #1

Dim s As String

Input #1, s

MsgBox s

Close #1

End Sub

Как видим, для записи можно использовать оператор Print, а для чтения – Input, воспользовавшись идентификатором открытого файла. Естественно, есть особенности работы. Например, если записать такую строку Print #1, "Hello , File", то оператор Input #1 прочитает только Hello и все. Запятая воспринимается как разделитель. И это правильно. Есть форматы текстовых файлов, когда числа разделены запятой. В следующем коде последовательно выведутся надписи Hello и File:

Input #1, s

MsgBox s

Input #1, s

MsgBox s

С данной проблемой можно бороться оператором Line Input, который прочитает строку целиком:

Sub Test()

Open "D:\Stud\1.txt" For Output As #1

Print #1, "Hello , File"

Close #1

Open "D:\Stud\1.txt" For Input As #1

Dim s As String

Line Input #1, s

MsgBox s

Close #1

End Sub

Возникает важный вопрос о том, как узнать конец файла. Для этого есть функция EOF (идентификатор), которая позволяет определить конец файла:

Sub Test()

Dim s As String

Open "D:\Stud\1.txt" For Output As #1

Print #1, "Hello , File"

Close #1

Open "D:\Stud\1.txt" For Input As #1

While Not EOF(1)

Input #1, s

MsgBox s

Wend

Close #1

End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]