Вот ещё одна задачка на тему реализации функций в VBA. В отличии от предыдущей, в данном примере больше внимания уделено обработке ошибок в процессе работы программы. Заранее скажу, что если что-то будет не ясно и в этой статье вы не нашли ответ, рекомендую глянуть предыдущую на такую же тему.
Задача:
Реализовать в VBA математические функции, вывести сумму этих функций в ячейки напротив заданных Х. Сами Функции таковы:
Вперёд! Пишем код:
Private Sub Primer() Dim x() As Double Dim f() As Double Dim f1 As Double Dim f2 As Double Dim f3 As Double Dim i As Integer Dim size As Integer size = WorksheetFunction.CountA(Worksheets(1).Columns(1)) ReDim x(size) ReDim f(size)
Начало примерно такое же, как и в Задаче 1. Все команды были описаны в предыдущей статье.
i = 1 Do While i < size x(i) = Cells(i + 1, 1).Value On Error GoTo Handle f1 = Exp(x(i)) f2 = Log(5 / ((x(i) ^ 3) + 4)) / Log(7) f3 = Exp(-Sqr(x(i) / (1 + x(i)))) f(i) = f1 + f2 + f3 Cells(i + 1, 2) = f(i) metka: i = i + 1 Loop Exit Sub
Основной алгоритм: запускаем цикл по i от 1 до количества элементов в 1ой колонке (сколько задал пользователь значений). В цикле мы находим f# и их сумму записываем в массив f, который выводим в ячейку напротив. Команда x(i) = Cells(i + 1, 1).Value в большинстве случаев синоним обычной x(i) = Cells(i + 1, 1). Об metka: скажу в следующем куске.
Handle: If Err.Number = 5 Then Cells(i + 1, 2) = "Неверная область значений" End If If Err.Number = 11 Then Cells(i + 1, 2) = "Неверная область значений" End If If Err.Number = 13 Then Cells(i + 1, 2) = "Неверные исходные данные" End If Resume metka End Sub
И тут кроется вся изюминка примера: автор с помощью обработчика ошибок, с которым мы познакомились ранее, записывает в ячейку либо «Неверная область значений», либо «Неверные исходные данные» в зависимости от номера возникающей ошибки. С перечнем номеров ошибок, вы можете ознакомиться здесь.
С помощью команды Resume metka — возвращаем компилятор к строке metka:, и он продолжает оттуда.
Наш вывод:
Вот, собственно, и всё. Задавайте вопросы в комментариях. Надеюсь Вы прониклись магией VBA, если же нет, читайте продолжение. =)
Скачать исходники
Будьте первым, кто оставит комментарий