Первый пример после введения может кому-то показаться страшным и непонятным, но не волнуйтесь, всё разберём по полочкам и даже неопытный кодер поймёт какие возможности нам открывает VBA.
Итак, перед нами задача:
Реализовать в VBA математические функции, вывести сумму этих функций в ячейки напротив заданных Х. Сами Функции таковы:
Приступаем! Сначала определитесь, где вы будете писать. Есть вариант писать программу на самом Листе, но помните, !! если удалите случайно лист, на котором вы писали код то все ваши труды пойдут прахом!!. Вот эти листы и есть, те самые, которые у вас на Главной.
Так что я вам советую создать модуль (Дополнительный блок), с которым могут быть связанны все Листы в ваше книге. Для этого в нашей среде нажимаем Insert —> Module. Дальше открываем его двойным щелчком (если не открылся автоматически).
Переходим к коду.
Public Sub prog1() Dim x() As Double Dim f1 As Double Dim f2 As Double Dim f3 As Double Dim f As Double Dim i As Integer Dim s As Integer
Здесь идёт объявление: самой функции(Sub), динамического массива х(), который нужно потом переопределить (всегда! при работе с динамическим массивом в VBA), f1, f2, f3 результат наших трёх функций, f — сумма результатов функций, i, s — необходимые переменные для промежуточных действий.
В относительно далёкие времена использовалось объявление через %s, %d и т.д., но данное нами объявление считается грамотным и современным на дату публикации.=)
On Error GoTo errHandler Do ReDim x(s - 1) As Double x(i) = Cells(2 + i, 1) If x(i) >= 0 Or Tan(2 ^ x(i)) <> 0 Then f1 = Log(x(i)) / Log(2) f2 = Tan(1 / (x(i) ^ 3)) f3 = Log(Abs(Tan(2 ^ x(i)))) / Log(2) f = f1 + f2 + f3 Cells(2 + i, 3) = f i = i + 1 Else: MsgBox ("Error!") i = i + 1 End If Loop Until i = s - 1 Exit Sub errHandler: MsgBox Err.Description, vbCritical, "Error No: " & Err.Number End Sub
Теперь рассмотрим самую главную часть нашего кода. Я решил не разрывать на части и рассказывать о каждом в отдельности, а разжевать этот большой кусок, чтобы вы могли видеть полную картину происходящего.
On Error GoTo errHandler эта штука позволяет ловить ошибки, которые возникают во время прохождения по коду. При ошибке компилятор переходит к блоку, где описано действие при ошибке. Внизу программы после Exit Sub и ключевой строки errHandler:.
Do — начало обычного цикла, обычно используется с while или until. Заканчивается этот цикл строкой Loop Until i = s — 1. Это означает, цикл заканчивается при условии i = s — 1 и это условие проверяется только после прохождение цикла. То есть: Действие -> Проверка условия -> либо снова действие либо идём дальше.
ReDim — та самая команда переопределения динамического массива, о которой я упоминал в начале.С помощью неё мы говорим, что массив Х будет иметь s — 1 элементов.
Cells() — команда для обращения к ячейки, в её параметры мы записываем «координаты» ячейки.
If x(i) >= 0 Or Tan(2 ^ x(i)) <> 0 Then — здесь мы проверяем подходит ли на введённые пользователем Х. Это условие следует из области допустимых значений для того или иного уравнения.
Далее, думаю, понятно. Приравниваем наши f# соответствующим уравнениям и суммируем их в f. Записываем результат в ячейку командой cells() = . И увеличиваем счётчик по i.
Else выполняется в том случае, если Х не прошёл проверку.
MsgBox выводит сообщение в диалоговом окне.
Запомните, в этом языке каждый If имеет свой End If. Кроме тех случаев, когда условие задано в одну строку.
Предпоследняя страшная строка MsgBox Err.Description, vbCritical, «Error No: » & Err.Number, благодаря On Error GoTo errHandler срабатывает только во время ошибки в самом процессе, например, введён неверный тип данных.
Err.Description — обращение к объекту Err(Error) к параметру Description.
vbCritical — отвечает за значок, выводимый в окошке.
«Error No: » & Err.Number: то что в кавычках, просто символьная строка, & — знак логической «И» (синоним And) и Err.Number опять же обращение к объекту Err и к его параметру Number, что, как вы наверное догадались, значит номер ошибки.
Наш вывод.
Вот, собственно, и всё. Задавайте вопросы в комментариях. Надеюсь Вы прониклись магией VBA, если же нет, читайте продолжение. =)
Скачать исходники
Будьте первым, кто оставит комментарий