Skip to content

Реализация математических функций. Задача 2

Вот ещё одна задачка на тему реализации функций в VBA. В отличии от предыдущей, в данном примере больше внимания уделено обработке ошибок в процессе работы программы. Заранее скажу, что если что-то будет не ясно и в этой статье вы не нашли ответ, рекомендую глянуть предыдущую на такую же тему.

Задача:

Реализовать в VBA математические функции, вывести сумму этих функций в ячейки напротив заданных Х. Сами Функции таковы:
CodeCogsEqn (2)
CodeCogsEqn (1)
CodeCogsEqn

Вперёд! Пишем код:

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:, и он продолжает оттуда.
Наш вывод:
Снимок5
Вот, собственно, и всё. Задавайте вопросы в комментариях. Надеюсь Вы прониклись магией VBA, если же нет, читайте продолжение. =)

Скачать исходники

Опубликовано вVBA

Будьте первым, кто оставит комментарий

    Добавить комментарий