A rel="nofollow" href="
Вид материала | Документы |
СодержаниеШаг 11 - Дальше о Range Шаг 12 - Обработка ошибок VBA Errors1 и дальше выполняется код. Я понимаю, что прерывать функцию из-за ошибки не всегда надо. И не только я так думаю, создате |
- A rel="nofollow" href=", 36.52kb.
- A rel="nofollow" href=", 132.12kb.
- A rel="nofollow" href=", 3866.49kb.
- A rel="nofollow" href=", 648.19kb.
- Впамять об этих событиях в Пасху предписывалось в a rel="nofollow" href=", 318.33kb.
- A rel="nofollow" href=", 1934.75kb.
- A rel="nofollow" href=", 91.88kb.
- A rel="nofollow" href=", 8282.81kb.
- A rel="nofollow" href=", 578.69kb.
- A rel="nofollow" href=", 1044.02kb.
Шаг 11 - Дальше о Range
Разговаривая о выделении ячеек с помощью Range мы с Вами должны знать, что возвращает этот метод множество. Это множество может состоять из одной или нескольких ячеек. А если множество, то информатика говорит о необходимости иметь возможность их объединения.
Sub Test()
With Application.Workbooks.Item("Test.xls")
Worksheets("Лист2").Activate
Dim HelloRange As Range
Set HelloRange = Range("D3:D10, A3:A10 , F3")
HelloRange.Select
End With
End Sub
А вот результат работы этого кода.
Раз есть объединения должно быть и пересечение, раз уж идет разговор о теории множеств. Получить его можно вот так.
Sub Test()
With Application.Workbooks.Item("Test.xls")
Worksheets("Лист2").Activate
Dim HelloRange As Range
Set HelloRange = Range("A1:A20 A8:D8")
HelloRange.Value = "Hello"
End With
End Sub
Будет выделена всего одна ячейка. Как Вы видите из предыдущих примеров отличаются типом обьявления - "D3:D10, A3:A10" это объединения, а "A1:A20 A8:D8" это пересечение. Используя пересечения и объединения можно строить область любого уровня сложности.
Получив объединение можно узнать количестов ячеек.
Sub Test()
With Application.Workbooks.Item("Test.xls")
Worksheets("Лист2").Activate
Dim HelloRange As Range
Set HelloRange = Range("A1:A20, D1:D20")
MsgBox (Str(HelloRange.Count))
End With
End Sub
Да пора бы уже расказать о этой Str. Эта функция переводит число в строку. Вот пример:
Sub Test()
Dim x As Integer
x = 10
Dim s As String
s = Str(x)
MsgBox (s)
End Sub
Или так с типом Double она сама определит как переводить, простая и умная, как женщина моей мечты :-)
Sub Test()
Dim x As Double
x = 10.333333
Dim s As String
s = Str(x)
MsgBox (s)
End Sub
Шаг 12 - Обработка ошибок VBA
Программирование это как хождение по минному полю. Неизвестно где взорвешься. Наверно так. Вы наслышаны о том, что Windows напичкан ошибками, о том что среда разработки любая при том - тоже. Мне попадались исследования на эту тему. Типа, что на каждые 1000 строк кода одна ошибка, у хорошего программиста естественно :-). В общем это закон такой. Все равно ошибешься где-нибудь. Проводя аналогию между женщиной и компьютером :-))) вообщем понятно.
Для обработки ошибок в VBA и VB есть специальный оператор On Error. Его задача при возникновении ошибки передать управление в то место( процедура или кусок кода), в котором это ждут. Посмотрим пример:
Sub Test()
On Error GoTo Errors1
Dim x As Integer
Dim a As Integer
Dim c As Double
x = 20
a = 0
c = x / a
MsgBox (" Этого не должно быть")
GoTo Ends:
Errors1:
MsgBox ("Ну ты блин Тикурила Даещь")
Ends:
End Sub
В данном примере при возникновении ошибки управление передается по метке Errors1 и дальше выполняется код. Я понимаю, что прерывать функцию из-за ошибки не всегда надо. И не только я так думаю, создатели VBA тоже так считали, и поэтому есть оператор Resume Next. Этот оператор реализует небезызвестный принцип - Ни шагу назад. Выполнение пойдет дальше, несмотря на ошибку.
Sub Test()
On Error GoTo Errors1
Dim x As Integer
Dim a As Integer
Dim c As Double
x = 20
a = 0
c = x / a
MsgBox ("Опаньки !!!")
GoTo Ends:
Errors1:
MsgBox ("Ну ты блин Тикурила Даещь")
Resume Next
Ends:
End Sub
А вот, если Вы вообще не хотите ничего говорить по поводу ошибки, то можете поступить очень сурово. Вот так. Я рекомендую применять это для бухгалтерских расчетов. Ни кто и не догадается :-)))
Sub Test()
On Error Resume Next
Dim x As Integer
Dim a As Integer
Dim c As Double
x = 20
a = 0
c = x / a
x = 10
a = 3
c = 10 / 3
MsgBox ("Опаньки !!!")
End Sub
Над резюме можно немного поэкспериментировать, вот возможные описания:
Resume Next
Resune строка
Resume метка
Resume 0
Пример ниже будет упорно требовать, чтобы ввели число отличное от 0:
Sub Test()
On Error GoTo Error1
Dim x As Integer
Dim a As Integer
Dim c As Double
x = 20
a = Str(InputBox("введите число"))
c = x / a
x = 10
MsgBox ("Опаньки !!!")
GoTo Ends:
Error1:
MsgBox ("думай о программировании, а не о женщинах")
a = Str(InputBox("введите число"))
Resume 0
Ends:
End Sub