Как в visual basic создать цикл


Содержание

Операторы цикла в Visual Basic. Теоретическая часть

Читайте также:

  1. BTL-реклама (часть 3)
  2. CHILDREN WITH VISUAL IMPAIRMENTS
  3. I ЧАСТЬ. ТЕОРЕТИЧЕСКАЯ
  4. I. ОБЩАЯ ЧАСТЬ 1 страница
  5. I. ОБЩАЯ ЧАСТЬ 2 страница
  6. I. ОБЩАЯ ЧАСТЬ 3 страница
  7. I. ОБЩАЯ ЧАСТЬ 4 страница
  8. I. ОБЩАЯ ЧАСТЬ 5 страница
  9. I. ОБЩАЯ ЧАСТЬ 6 страница
  10. I. ОБЩАЯ ЧАСТЬ 7 страница
  11. I. ОБЩАЯ ЧАСТЬ 8 страница
  12. I. ОБЩАЯ ЧАСТЬ 9 страница

Лабораторные работы по основам программирования

2.1. Табулирование функций, представленных аналитически
и сходящимся рядом

Цель работы

· Закрепление теоретических знаний по основам организации разветвляющихся и циклических структур.

· Приобретение практических навыков программирования с использованием разветвляющихся и циклических структур в системе Visual Basic.

В VB существуют три вида операторов цикла:

· счетный цикл: For…To … Next

· циклы с предусловиями: Do While. Loop, Do Until. Loop, While…WEnd

· циклы с постусловиями:Do. Loop While, Do. Loop Until.

Счетный цикл – позволяет циклически выполнять набор операторов заданное число раз. Его синтаксис следующий:

For счетчик = начало To конец [Step шаг]

Параметр счетчик – это числовая переменная (целого, вещественного типа или типа Date, Variant, Currency), которая автоматически увеличивается после каждого повтора. Начальное значение счетчика равно параметру начало, а конечное параметру – конец. Если [Step шаг] не указан, то шаг считается равным 1, значение шага можно изменять. Оно может быть положительным или отрицательным числом.

Существуют четыре синтаксические конструкции цикла Do….Loop:

Операторы между ключевыми словами Do … Loop выполняются заданное количество раз в зависимости от условия. Например, в следующем фрагменте программы при C = 100 условие будет выполняться и произойдет вход в цикл. Внутри цикла происходит обращение к процедуре и уменьшение значения C на 1. Далее вновь проверяется условие (C > 0) и операторы цикла выполняются повторно (всего они выполнятся 100 раз), до C = 0. Когда же условие C >0 становится ложным и цикл прекращается.

Тот же самый фрагмент программы, выполненный с использованием цикла с предусловием по синтаксису 2:

В данном случае цикл выполняется, пока условие равно False, в отличие от предыдущего случая, то есть продолжается до выполнения условия C = 0.

Операторы циклов по синтаксису 3 и 4 очень похожи на первые два за исключением того, что условие не вычисляется до тех пор, пока цикл не выполнится хотя бы один раз.

В синтаксисах этих циклов можно использовать операторы безусловного выхода из цикла Exit For и Exit Do, позволяющих передать управление оператору, находящемуся за циклом. Например, в следующем фрагменте программы, если начальное значение C окажется >50, то цикл немедленно прекратиться.

Do Until C 50 then

MsgBox “Нач. значение больше допустимого”, ”Ошибка ввода”

Цикл While…Wend использовался в ранних версиях Visual Basic. Его синтаксис следующий:

В отличии от цикла Do..Loop цикл While ..Wend не имеет второго варианта, в котором проверка условия выполняется в конце цикла. Кроме того, для него нет оператора выхода из цикла, наподобие Exit Do.

Дата добавления: 2014-12-23 ; Просмотров: 1858 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Канал в Telegram

Вы здесь

Работа с циклом For в VBA

В этом уроке будет рассмотрена работа с циклом For в VBA. Пример работы с циклом For, так же будет продемонстрирован пример создания формул в Excel с помощью макросов.

Цикл For работает по принципу счетчика. For применяется в тех случаях, когда необходимо повторить некоторые действия заранее известное кол-во раз. Например, цикл For часто используется при чтении массивов.

Цикл For имеет следующий синтаксис:
For счетчик = начало цикла To конец цикла [Step шаг]
группа операторов, команд и т.д.
Exit For
Next счетчик

  • «счетчик» — переменная, которая изменяется на указанный «шаг». Если шаг не указан, то по умолчанию берется единица.
  • «начало цикла», «конец цикла» — числа или переменные указывающие нижний предел счетчика и верхний. Остановка цикла происходит тогда, когда «счетчик» > «конец цикла» (или, если цикл обратный, т.е. с шагом -1, то «счетчик» n;
  • Cells(i, 4) — ячейка выделенного листа, i номер строки, 4 -номер столбца в который выводится результат. Обратите внимание, наш счетчик i указывает номер строки листа Excel;
  • Next i — оператор закрытия цикла и перевода указателя к For. Все что находится между For и Next выполняется в цикле;
  • CStr — функция преобразующая число в текст.

Ячейке мы присваиваем формулу созданную следующим образом «=C» & CStr(i) & «+E» & CStr((n — i) + 2). Знак & — «склеивание» символов, строк. В результате у нас получится формула «=Сn+E((n — i) + 2)» где n = 21, i — счетчик.
Страшно? Это только кажется :)

Все. После выполнения макроса мы получим следующий столбец (выделен), а в каждой ячейке формула:

Пример 2
Теперь рассмотрим цикл с указанным шагом. После расчета прошлого макроса мы получили три столбца, теперь нам необходимо из столбца E вычесть D, в столбец F вывести формулы вычитания. Код макроса следующий:

Sub Цикл_For_с_шагом()
Const n = 21
For i = n To 2 Step -1
Cells(i, 6) = «=E» & CStr(i) & «-D» & CStr(i)
Next i
End Sub

В данном случае все тоже самое, только цикл теперь «бежит» не от 2, а от 21 до 2 с шагом (Step) -1.
Результат выполнения получим следующий:

Цикл For, в VBA, является не единственным циклом. В дальнейшем будут рассмотрены еще пара вариантов циклов, без которых не обойтись при написании макрокоманд в Excel.

Циклы VBA (ч.1). Команды организации циклов

Какие либо действия процедуры повторяющиеся заданное количество раз или пока выполняется или не выполняется некоторое условие называют циклом.

Процесс выполнения все операторов, заключенных в структуру цикла, один раз называется итерацией цикла.

Структуры цикла, всегда выполняющиеся заданное количество раз, называются циклами с фиксированным числом итераций. Другие типы структур цикла повторяются переменное количество раз в зависимости от некоторого набора условий. Такие циклы называются неопределенными циклами.

Блок операторов, находящийся между началом и концом цикла называется «тело цикла».

Самой простой структурой цикла является фиксированный цикл.

Цикл For..Next

For counter = Start To End [Step StepSize]
Statements
Next [counter]

Counter — любая численная переменная VBA
Start — любое численное выражение , определяет начальное значение для переменной counter
End — численное выражение, определяет конечное значение для переменной counter
Statements — один, несколько или ни одного оператора VBA (тело цикла).

По умолчанию VBA увеличивает переменную counter на 1 каждый раз при выполнении операторов в цикле. Можно задать другое значение (SterSize — любое численное выражение), на которое будет изменяться counter.

Ключевое слово Next сообщает VBA о том, что достигнут конец цикла. Необязательная переменная counter после ключевого слова Next должна быть той же самой переменной counter, которая была задана после ключевого слова For в начале структуры цикла.

Ниже представлен листинг простейшего цикла For..Next, который считает сумму цифр от 1 до 10:

А теперь два варианта цикла For..Next с использованием шага цикла отличного от единицы:

Обратите внимание! При уменьшении счетчика цикла For..Next цикл выполняется, пока переменная счетчика больше или равна конечному значению, а когда счетчик цикла увеличивается, цикл выполняется, пока переменная счетчика меньше или равна конечному значению.

Цикл For Each..Next

Цикл For Each..Next не использует счетчик цилка. Циклы For Each..Next выполняются столько раз, сколько имеется элементов в определенной группе, такой как коллекция объектов или массив (которые будут рассматриваться позже). Проще говоря, цикл For Each..Next выполняется один раз для каждого элемента в группе.

For Each Element In Group
Statements
Next [Element]

Element — переменная, используемая для итерации по всем элементам в определенной группе
Group — это объект коллекции или массив
Statements — один, несколько или ни одного оператора VBA (тело цикла).

Цикл For Each..Next всегда выполняется столько раз, сколько имеется элементов в определенной группе.

В нижеприведенном листинге показана функция SheetExists, использующая цикл For Each..Next для определения того, существует ли определенный лист в рабочей книге Excel:

VBA Excel. Цикл For… Next

Цикл For. Next в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла For. Next.

Цикл For. Next в VBA Excel предназначен для выполнения группы операторов необходимое количество раз, заданное управляющей переменной цикла — счетчиком. При выполнении цикла значение счетчика после каждой итерации увеличивается или уменьшается на число, указанное выражением оператора Step, или, по умолчанию, на единицу. Когда необходимо применить цикл к элементам, количество которых и индексация в группе (диапазон, массив, коллекция) неизвестны, следует использовать цикл For Each. Next.

Синтаксис цикла For. Next

В квадратных скобках указаны необязательные атрибуты цикла For. Next.

Компоненты цикла For. Next

Компонент Описание
counter Обязательный атрибут. Числовая переменная, выполняющая роль счетчика, которую еще называют управляющей переменной цикла.
start Обязательный атрибут. Числовое выражение, задающее начальное значение счетчика.
end Обязательный атрибут. Числовое выражение, задающее конечное значение счетчика.
Step* Необязательный атрибут. Оператор, указывающий, что будет задан шаг цикла.
step Необязательный атрибут. Числовое выражение, задающее шаг цикла. Может быть как положительным, так и отрицательным.
statements Необязательный** атрибут. Операторы вашего кода.
Exit For Необязательный атрибут. Оператор выхода из цикла до его окончания.
Next [ counter ] Здесь counter — необязательный атрибут. Это то же самое имя управляющей переменной цикла, которое можно здесь не указывать.

*Если атрибут Step отсутствует, цикл For. Next выполняется с шагом по умолчанию, равному 1.

**Если не использовать в цикле свой код, смысл применения цикла теряется.

Примеры циклов For. Next

Вы можете скопировать примеры циклов в свой модуль VBA, последовательно запускать их на выполнение и смотреть результаты.

Простейший цикл

Заполняем десять первых ячеек первого столбца активного листа Excel цифрами от 1 до 10:

Простейший цикл с шагом

В предыдущий цикл добавлен оператор Step со значением 3, а результаты записываем во второй столбец:

Цикл с отрицательными аргументами

Этот цикл заполняет десять первых ячеек третьего столбца в обратной последовательности:

Увеличиваем размер шага до -3 и записываем результаты в четвертый столбец активного листа Excel:

Вложенный цикл

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

Выход из цикла

В шестой столбец активного листа запишем названия десяти животных, конечно же, с помощью цикла For. Next:

Следующий цикл будет искать в шестом столбце крокодила, который съел галоши. В ячейку седьмого столбца цикл, пока не встретит крокодила, будет записывать строку «Здесь был цикл», а когда обнаружит крокодила, запишет «Он съел галоши» и прекратит работу, выполнив команду Exit For. Это будет видно по ячейкам рядом с названиями животных ниже крокодила, в которых не будет текста «Здесь был цикл».

Результат работы циклов For. Next из примеров:

Результат работы циклов For. Next

Такие данные на активном листе Excel вы получите, если последовательно запустите на выполнение в редакторе VBA все семь подпрограмм из примеров, демонстрирующих работу циклов For. Next.

Цикл с дробными аргументами

Атрибуты start, end и step могут быть представлены числом, переменной или числовым выражением:

В результате вычисления значения переменной вне цикла или выражения внутри его может получиться дробный результат. VBA Excel округлит его до целого числа, используя бухгалтерское округление:

Excelling at Excel вып.2: Циклы в Excel без VBA

Немного теории. Циклом называется конструкция, которая некоторое (определяемое) количество раз выполняет заданные действия. Например, Вам нужно перебрать некий массив данных и выделить в нем пустые поля. В программировании это реализуется при помощи циклов. В VBA наиболее частым вариантом является конструкция For i = 0 to n … Next i.

Но бывают ситуации, когда нам требуется цикл, но мы не можем использовать макросы. Приведу пример из своей практики. Имелся некий перечень проектов с указанием их характеристик.

Также отдельно имелись сметы по каждому такому проекту с детализацией статей затрат и с указанием исполнителя по каждой из статей с указанием доли участия. По каждой из статей могло быть до 4 исполнителей.

Задача: свести это в одну таблицу для последующей обработки через ту же сводную таблицу. То есть требовалось получить вот такое представление:


Можно конечно было сделать это все руками, но предполагалось, что количество проектов и данные в таблицах могут меняться, поэтому нужно было придумать гибкое решение.

И вот здесь и родилось это решение: цикл, а точнее несколько вложенных циклов. То есть нужно получить что-то вроде счетчика, который переключает старший разряд только после того, как достигнут максимум по младшему разряду.

В нашем примере получалось три цикла (в порядке от младшего к старшему): тип исполнителя (цикл 1), статья затрат (цикл 2), проект (цикл 3). Алгоритм выглядит примерно так:

Цикл 1 (тип исполнителя)

Так бы примерно выглядела бы и структура кода VBA для реализации этих трех циклов, но в самом Excel так сделать нельзя. Что же делать?

Давайте еще раз обратимся к сути цикла: это повторение какого либо действия определенное количество раз. Теперь рассмотрим это на примере одного цикла – цикла 1 (тип исполнителя).

Допустим, у нас 4 возможных типа исполнителя. Они у нас на отдельном листе «Тип исполнителя». Соответственно, нам надо перебрать все эти четыре значения по одному. Как? Во-первых, мы должны определить, что их именно 4. Для этого воспользуемся функцией COUNTA (СЧЁТА).

ВАЖНО! Не забудем вычесть заголовок.

Во-вторых, нам надо оформить перебор значений от 1 до 4. Вернее, до значения полученного из COUNTA (СЧЁТА). Это именно столько «шагов» должен сделать наш цикл.

Увы, без вспомогательных столбцов здесь не обойтись. Добавляем их слева от результирующей таблицы и в первой строке в ячейке А2 смело ставим 1. В ячейке А3 и ниже мы пропишем следующую формулу:

Получаем бесконечное повторение от 1 до 4. Теперь нам остается получить значение на каждому «шагу» цикла. Это можно сделать при помощи функции OFFSET (СМЕЩ), в которой значения столбца А мы будем использовать в качестве второго параметра (смещение по строкам).

Теперь добавим второй цикл – цикл 2 (статья). Подход такой же за исключением одного «НО»: переключать значение мы будем не сразу после предыдущего как в цикле 1, а по достижении максимального значения в цикле 1 (тип исполнителя). Для этого нам нужно формула, описывающая такую логику:

«Если значение типа исполнителя равно количество типов, то

если предыдущее значение статьи равно количеству статей, то 1,

если не равно, то предыдущее значение + 1,

если не равно, то предыдущее значение».

Вот так это выглядит в экселе:

Цикл 3 (проект) оформляется схожим образом с циклом 2 (статья). Но «триггером» для переключения на новое значение будет уже два условия одновременно: максимальное значение количества статей и максимальное количество типов исполнителей. В формуле выполнение этих двух условий мы оформим через функцию AND (И) равную TRUE (ИСТИНА).

Осталось только добавить формулы СМЕЩ в ячейки с данными.

Необходимо не забыть «остановить» цикл. В противном случае вы получите то, что ниже:

Чтобы этого избежать в формуле в столбце А мы специально вставили в одном из возможных исходов значение «» (пусто), чтобы этим самым «остановить» бесконечный цикл. Теперь при протягивании формулы будут выводиться пустые ячейки. В формул остальных ячеек (в т.ч. со СМЕЩ) следует добавить:

Собственно, все. Теперь можно спокойно создавать на основе полученной таблицы сводную таблицу. Единственное, что придется в фильтре убрать пустые значения.

Найдены возможные дубликаты

Я когда ваял в экселе производство растворителей, такие советы были для меня бесценными.

Но я их находил, в основном, на пленетеэксель (не сочтите за рекламу).

А на пикабу это как то специфично выглядит, тем более второй пост подряд.

Плюсану, конечно, но жду таки котиков и сисек, ну или байку какую нибудь )))

Пикабу более читаемый, чем планетаэксель, да и банально в поиске нередко выше, а значит найти легче.

И увы, никаких котиков и сисек тут. Только эксель, только хардкор:)

Думаю, тебе поможет фильтр

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

А суммирование рабочих дней и часов делается через СЧЁТЕСЛИ и СУММЕСЛИ, соответственно:

COUNTIF(N25:AC25;»Я») — на массив где Я и В

SUMIF(N25:AC25;»Я»;N26:AC26) — массив где Я и В и массив с часами

Суммесли не подходит?

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

Раб.дни в помощь. Там есть параметр Праздники. Делаете ссылку на массив с праздниками, приходящимися на будни, и будет Вам счастие.

Самый простой вариант — воспользоваться расширенным фильтром, который выберет из вашего массива все выходные и праздники с непустыми ячейками, а уж потом подсчитать получившийся результат. Праздники забиваются вручную, выхи — формулами. Делается все очень быстро.

Что-то более конкретное сказать можно только если файл посмотреть. Но по опыту, если надо считать по особому форматированные ячейки, то это только VBA

Интересная статья, но без острой потребности вникать лень.

Внезапно для решения рабочих вопросов потребовалось резко изучить VBA. Можешь подсказать книги/курсы/видео для поверхностного изучения синтаксиса и общей логики языка?

изучал сам, без учебников. просто решал конкретную задачу. плюс был опыт программирования на php и javascript. поэтому логика там схожая.

В интернете полно ресурсов, где можно почитать.

а так синтаксис довольно-таки простой. Через точку пишете адрес объекта, к которому обращаетесь или к свойству этого объекта. Например, ячейки: Лист.Адрес.Свойство:

Каждая манипуляция записывается на отдельной строке

Вообще очень помогает макро-рекордер. Он правда часто пишет несколько более пространный код, но это удобно, если не знаешь как делать.

Из конструкций обязательно надо изучить IF . Then и циклы.

Пишем прототип бизнес-игры (экономическая стратегия для 24 пользователей по сети)

. на VBA?? сетевая? браузерная? тогда уже сразу учите PHP. По-хорошему, туда же еще mySQL для работы с БД и javascript для красивой реализации на стороне пользователя. Ну и конечно html с CSS для верстки страниц. сам так запилил своему прошлому работодателю мини-ERP

Вышел я сегодня значит первый день, взглянул на продукт и был поражен нестандартным подходом к разработке. Да, это реально сетевая игра для запуска по локалке, да, она реально работает на 24 пользователя, и да, она написана на VBA целиком и полностью. Выглядит как набор кнопок и всплывающих окон в экселе, но это реально работает. Обмен данными с сервером происходит через расшаренную на сервере папку с таблицами с данными для каждого конкретного пользователя. Так как это прототип, и у нас уже есть человек, который это все написал и поддерживает (я на нее сегодня чуть ли не молиться начал, когда увидел объем проделанной работы), буду договариваться с начальством о переводе всей этой фигни на нормальный стек технологий и буду учить, соответственно то, что ты написал)

офигеть. несколько раз прочитал пост. это же надо было так заморочиться и сделать игру на самом для этого не подходящем движке. создателю респект. главное в программирование, на мой взгляд, — это правильное построение алгоритмов. Если они выстроены правильно, то работать будет на чем угодно. Делал в свое время таск-менеджер и на удаленном сервере на php и mysql. Потом легко перенес это на VBA, т.к. логика и взаимосвязь таблиц данных одна и та же.

В любом случае успехов! Но мой совет — не занимайтесь больше такими извращениями!

И растягиваем вниз

Во-первых, @ArtemTabolin , спасибо — делаешь хорошее дело!

Во-вторых — сначала я зашел в этот пост, а потом уже заглянул в первый, т.к. первый пропустил, т.к. подумал, что это очередной рекламный пост — меняй название))

В-третьих, явно многие знают, но, на всякий случай допишу — гугл.транслейт прекрасно понимает функции экселя и переводит их на многие (многие, т.к. я не тестил все), и это супер полезно, т.к. самые точные мануалы именно на русском. Всю функцию, конечно, вряд ли переведет, но если по частям — не вопрос, понимает.

А где пример файла что бы вы живую поглядеть формулы?

Если вникнуть и понять изложенный подход, готовый файл Вам не понадобиться.

А не легче это все будет делать функциями SUMIFS , COUNTIFS и подобными (сорри, не в курсе как они на русском). Или версия екселя только старая доступна?

Уточните, пожалуйста, как Вы хотите использовать COUNTIFS (СЧЕТЕСЛИМН)?

COUNTIFS отлично подходит для проверки правильности подсчета. Всегда ставлю во вторую (можно скрытую колонку).

Если честно, то меня эксел бесит :)

Я когда вижу огромные таблицы с кучей связей, с хитрым форматированием, выпадающими списками и прочим всяким таким..

Я прям благоговею перед их создателями, считаю их просто монстрами. И одновременно мне их жалко, жалко их потраченный впустую труд. Что люди не делают, лишь бы не изучать VBA и SQL :)

И я показываю, им как все эти ужасные формулы на несколько строк переписываются маленьким скриптиком в VBA редакторе.

А если еще на компьютере есть MS Access то, тут вообще возможна истинная магия.

на одном из проектов заказчик прямо просил не использовать VBA, чтобы простой пользователь мог так или иначе понять логика и проследить ее в ходе трансформации данных. VBA хорош для невидимой черновой работы. Когда же есть большой объем интерактивности с юзером VBA не очень подходит.

и других не менее прекрасных функций в перемешку с абсолютными и относительными ссылками на ячейки и диапазоны ячеек находящиеся на разных листах, а то и в разных книгах, прям такое понятное и прозрачное, что прострой пользователь поймет, что и как.

В моей практике было такое, что авторы всей этой красоты^ приходили ко мне за помощью, ибо они уже сами мало чего понимали .

Проведите эксперимент: объясните человеку формулу СУММЕСЛИ и код VBA с суммированием по условию через цикл. Для меня лично результат очевиден

Я могу использовать СУММЕСЛИ и в VBA, если знаю о её существовании.

В данном случае в VBA можно использовать функцию SumIf и объяснять человеку придется ровно тоже самое.

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

Собственно, в VBA редакторе можно делать, как минимум, тоже самое, и еще много много другого, что редактируя формулу ячейки будет сделать практически невозможным.

Да, и сопровождать такое решение значительно проще, чем пытаться разобраться в нагромождении функций и ссылок на ячейки.

Уже тройное вложенное ЕСЛИ вызывает стойкое желание разбить монитор высчитывая эти скобочки и точку с запятой..

А если нужно 10 вложений. ничего кроме желания грязно выругаться это не вызывает. В VBA коде, хоть 15 вложений сделайте простым ctrl+C , ctrl+V

и всё это будет легко читаемо и прозрачно.

Собственно, я ни на чём не настаиваю, это чисто моё мнение. Но когда меня просят, сделать что-нибудь этакое, я по возможности стараюсь это запихнуть в VBA. Подход в стиле : «Нажми на кнопку, получишь результат»

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

Как в visual basic создать цикл

Loop Until Condition

  • Statements – группа операторов, выполняемая на каждом шаге цикла.
  • Condition – соответствующее условие.

Единственным отличием циклов с пред- и постусловием является то, что в первом случае тело цикла может не выполнить ни одного раза, а во втором случае тело цикла всегда выполнится хотя бы один раз.

Циклы с условием можно применять при работе с текстовыми файлами. В этом случае информация будет считываться до тех пор, пока не будет достигнут конец файла (синтаксис см. раздел «Сохранение и считывание информации»).

Иногда возникает необходимость досрочного прерывания цикла. Для этого в необходимом месте тела цикла записывают оператор «Exit For» или « Exit Do » в зависимости от вида прерываемого цикла. Как только компьютер встречает этот оператор, то цикл прерывается и управление передается оператору следующим за оператором «Next» или « Loop ».

В некоторых случаях важно повторить подзадачу несколько раз внутри более общей задачи. Один из способов написания такой программы – включить в цикл набор инструкций ( внутренний цикл), которые повторяются внутри другого цикла ( внешний цикл). Такая структура, состоящая из цикла в цикле, называется вложенными циклами. Любой цикл может быть вложен в любой другой независимо от их видов. Например, можно вложить цикл «For» в любой цикл «Do…Loop» и наоборот:

Do While condition

For CounterVar = StartNum To EndNum

Контрольные вопросы для самопроверки

  1. Что такое «цикл»? Какие циклы вы знаете?
  2. Какова классификация циклов и области использования?
  3. Что такое «тело цикла»?
  4. Какие циклы называются «итерационными»?
  5. Как сформировать цикл « For »? Как он работает?
  6. Как сформировать цикл « Do »? Как он работает?
  7. Чем отличаются циклы с пред- и постусловиями?
  8. Чем отличаются циклы « While » и « Until »? Являются ли они взаимозаменяемыми?
  9. Как предотвратить бесконечный цикл?
  10. Что такое «вложенный цикл»? Приведите примеры.

Операторы цикла. Цикл со счетчиком и цикл с условием. Примеры использования циклических операторов на языке Visual Basic


Цикл — это алгоритмическая структура, при помощи которой реализуется многократное повторение блоков операторов.

В языке Visual Basic существует три основных вида циклов, которые реализуется при помощи конструкций For: Next, Do:Loop и While:Wend.

Цикл For:Next. Используется в том случае, когда количество повторов заданного блока операторов известно заранее. Данная конструкция выглядит следующим образом:

For счетчик = начальное значение To конечное значение [Step шаг]

Когда приведенные операторы выполняются первый раз, то переменной счетчику присваивается начальное значение, после чего возможны два варианта действий. Если в результате проверки условия счетчик > конечное значение было получено значение True, то происходит завершение цикла, при этом блоки операторы1 и операторы2 ни разу не выполняются. С другой стороны, если результатом проверки условия является False, то в этом случае блоки операторов выполняются первый раз, после чего происходит переход на начало цикла. Далее значение переменной-счетчика увеличивается на шаг, расположенный после ключевого слова Step (в случае его отсутствия устанавливается шаг = 1). После этого снова проверяется истинность условия счетчик > конечное значение и т.д., окончание цикла происходит в тот момент, когда результатом данной проверки станет значение True.

Цикл Do:Loop.Применяется в том случае, когда число повторений операторов тела цикла заранее неизвестно. Существуют четыре разновидности данной конструкции. При использовании первых двух цикл либо выполнится много раз, либо не выполнится вообще.

Do Until условие

Do While условие

Операторы Loop Until условие

Операторы Loop While условие

Цикл While:Wend. Также используется в том случае, когда число повторений операторов тела цикла заранее неизвестно, и имеет следующий синтаксис:

Если результатом проверки условия является значение True, то блок операторы выполняется, иначе осуществляется переход на оператор, расположенный после служебного слова Wend. С другой стороны, если первая проверка условия даст результат False, то цикл не выполнится ни разу.

Выбор: If. Then

Примеры использования циклических операторов на языке Visual Basic.

Otwet = MsgBox(«Как дела?» ,4)

If Otwet = 6 Then ‘ выбрано «да»

MsgBox «Это чудесно!»

Else ‘ иначе, т.е. выбрано «нет»

MsgBox «Ну тогда удачи!»

В зависимости от того, правильно или ложно решение «Otwet = 6» (пользователь выбрал «да»), будут выполнены различные команды. Те команды, которые находятся между Then и Else будут выполнены если условие истинно, а команды между Else и End If, если условие ложно. Но в любом случае после End If исполнение команд будет продолжено.

11. Графические методы в системе проектирования и программирования VB 6. Пример циклического использования графических методов Scale, Print, Line и PSet при создании приложения «Построение графика функции». Примеры использования графических методов при создании графических Windows-приложений «Прямоугольная диаграмма» и «Круговая диаграмма». Реализация ввода и редактирования данных в указанных приложениях с помощью Редактора Меню и элемента управления Окно списка (List Box).

В элементе управления PictureBox использовались различные графические методы и свойства. Графика в Visual Basic 6.0 основывалась на API-интерфейсах Windows Graphics Device Interface (GDI).

В Visual Basic .NET графические возможности предоставляются пространством имен System.Drawing, инкапсулирующим новый набор API GDI+. GDI+ расширяет графические возможности Visual Basic 6.0, но новые методы несовместимы со старыми. При обновлении приложения Visual Basic 6.0 графические методы не обновляются.

Список графических свойств и методов Visual Basic 6.0, а также их эквиваленты для Visual Basic .NET: Свойство AutoRedraw, Метод Circle, Свойство ClipControls, Метод Cls, Свойство CurrentX, Свойство CurrentY, Свойство DrawMode, Свойство DrawStyle, Свойство DrawWidth, Свойство FillColor и другие

Пример:»Построение графика функций»

прорисовка графика функции sin(x):

Private Sub Command1_Click()

Dim x As Single

Picture1.Scale (-12, 2)-(12, -2)

Picture1.Line (-12, 0)-(12, 0)

Picture1.Line (0, 2)-(0, -2)

For x = -10 To 10 Step 0.01

Picture1.PSet (x, Sin(x))

Пример создания проекта приложения «Линейная диаграмма – график изменения температуры больного». В этом приложении реализуется действие графических методов PSet и Line, а также демонстрируются возможности работы с элементом управления ListBox (Поле списка):Заполнять значениями поле списка, а также редактировать эти значения, пользуясь четырьмя командами меню: Добавить, Вставить, Заменить, Удалить. Закончив редактирование, щелкаем графическое поле, после чего на нем появляется диаграмма для списка указанных значений.

Записываются коды следующих процедур,приведем для пример 2 прогр.кода(Это для прямоугольной и круговой диаграммы):Измерение температуры.

Dim n As Integer

Private Sub mnuAdd_Click()

NewT = InputBox(«Введите новое значение температуры»)

Private Sub mnuInsert_Click()

If OldT Max Then Max = It

For i = 0 To n — 1

Picture1.PSet (i + 1, Val(List1.List(i)))

Список каталогов (Directory List Box ) используется для отображения иерархического списка каталогов в пользовательской системе. Список файлов (File List Box) используется для отображения списка файлов в пользовательской системе и управления ими (открытие, удаление, сохранение и др.).

12. Массив объектов. Пример создания и использования массивов объектов – элементов управления на экранной форме приложения «Калькулятор». Программный массив как обобщение понятия переменной. Пример обработки одномерного массива в приложении «Пузырьковая сортировка». Динамический массив в языке VB 6. Пример циклического ввода данных в одномерный динамический массив. Пример использования динамического двумерного массива в приложении «Сканирование и обработка изображений».

Массивом называют упорядоченную последовательность элементов одного типа, обращение к которым осуществляется при помощи имени и индекса (т.е. порядкового номера элемента). Как правило, работа с элементами массива выполняется в циклах, где в качестве индекса выступает счетчик цикла.

У каждого массива определены нижняя и верхняя границы, в пределах которых может изменяться значение индекса. По умолчанию нижней границей любого массива является 0. Объем памяти, который требуется для массива, равен произведению байтов, выделяемых для одной переменной соответствующего типа, на количество элементов.

Существует две разновидности массивов: статические и динамические. Статические массивы значения его верхней и нижней границ не могут быть изменены в программе. Данный вид массивов описывается в программе так же, как и переменные – при помощи одного из служебных слов: Dim, Private, Public или Static с последующим указанием типа после служебного слова As. При этом может быть указана как верхняя, так и обе границы одновременно

Dim arrA(9) As Byte

Dim arrB(1 To 10) As Byte

В данном случае оба массива содержат одно и тоже количество элементов одинакового типа. Однако нумерация элементов arrA начинается с нуля, в то время как нумерация arrB – с единицы. Заполнение элементов массива, как правило, выполняется в цикле

Динамические массивы. Применяются в том случае, когда количество элементов массива заранее неизвестно и будет определяться в процессе выполнения программы. Как следствие, после того, как работа с динамическим массивом в программе была выполнена, можно освободить память, которую он занимает.

В качестве значений элементов массива могут выступать как значения определенного типа, так и другие массивы, которые могут иметь разные типы. При этом в последнем случае объявляемый массив должен иметь тип Variant. Массивы бывают одномерными и многомерными. Для описания многомерных массивов используются конструкции, аналогичные рассмотренным, однако отличие состоит в том, границы размерностей указываются через запятую.

Пузырьковая сортировка — это алгоритм, предназначенный для сортировки списков, которые уже находятся в почти упорядоченном состоянии. Если в начале процедуры список полностью отсортирован, алгоритм выполняется очень быстро. Перед применением пузырьковой сортировки важно убедиться, что элементы в основном расположены по порядку.

При пузырьковой сортировке список просматривается до тех пор, пока не найдутся два соседних элемента, расположенных не по порядку. Тогда они меняются местами, и процедура продолжается дальше. Алгоритм повторяет этот процесс до тех пор, пока все элементы не займут свои места.

При просмотре массива сверху вниз, элементы, которые перемещаются вверх, сдвигаются всего на одну позицию. Те же элементы, которые перемещаются вниз, сдвигаются на несколько позиций за один проход. Этот факт можно использовать для ускорения работы алгоритма пузырьковой сортировки. Если чередовать просмотр массива сверху вниз и снизу вверх, то перемещение элементов в прямом и обратном направлениях будет одинаково быстрым.

Private Sub Operacia_Click(Index As Integer)

If Ravno.Tag = «» Then ‘ нет изменения выбора операции?

‘ если операция была задана — вычисляем её значение:

If deystvie «нет» Then vtoroe = Val(Tablo.Caption): rezultat

Select Case Index ‘ запишем выбранное действие

Case 0 deystvie = «разделить»

Case 2 deystvie = «вычесть»

Case 4 deystvie = «сложить»

Case 5 deystvie = «умножить»

pervoe = Val(Tablo.Caption) ‘ первое число операции — то что на табло при выборе операции

Ravno.Tag = «второе» ‘ режим ввода второго числа

Private Sub rezultat()

Select Case deystvie

Tablo.Caption = pervoe + vtoroe

Tablo.Caption = pervoe — vtoroe

If vtoroe 0 Then

Tablo.Caption = pervoe / vtoroe

Else ‘ на ноль действительно нельзя делить!

Tablo.Caption = «на ноль не делят!»

Tablo.Caption = pervoe * vtoroe

Private Sub Sbros_Click()

deystvie = «нет» ‘ стираем, возможно, указанное действие

Tablo.Caption = «0» ‘ на табло — ноль Tablo.Tag = «» ‘ по умолчанию — вводится целое число

13. Средства языка VB 6 для работы с файлами – текстовыми файлами, бинарными файлами и файлами произвольного доступа. Использование пользовательского типа данных. Использование объектов Общий диалог (Common Dialog) и Rich Textbox для открытия и сохранения файлов RTF, выбора шрифта и выбора цвета на примере создания простейшего текстового редактора в системе VB 6. Использование объектов Общий диалог (Common Dialog) и графических методов для открытия, редактирования и сохранения графических (BMP) файлов на примере создания простейшего графического редактора в системе проектирования VB 6.

Visual Basic (и не только Visual Basic) различает три вида файлов (или, что практически то же самое, три режима доступа к файлу): Файлы последовательного доступаВсе текстовые (ASCII-, ANSI-файлы) состоят из последовательности строк символов, при этом каждая строка может иметь произвольную длину и доступ к этим строкам может быть только последовательным. Файлы произвольного доступаФайл произвольного доступа состоит из записей фиксированной длины, поэтому местоположение записи в файле можно вычислить умножением номера записи на ее длину. Благодаря этому оказывается возможным позиционироваться на произвольную запись. Бинарные (двоичные) файлыБинарный файл представляет собой частный случай файла произвольного доступа — достаточно принять длину записи равной одному байту и становится возможным позиционироваться на произвольный байт в файле. Что означают все эти байты и как они организованы — дело самой программы.

Задание шага цикла

Задание шага цикла

Полный синтаксис оператора For. . .Next включает необязательное ключевое слово Step (шаг) в первой строке структуры, как, например, в следующем фрагменте программного кода:

Dim strOddNumbers As String

For F = 1 To 33 Step 2

StrOddNumbers = strOddNumbers 5 F & » «

Next F MsgBox «Нечетными числами между 1 и 33 являются: » & _

В этом примере цикл создает строку, содержащую все нечетные числа из диапазона, определяемого значениями начало и конец цикла. Значение переменной-счетчика при каждом проходе цикла увеличивается на 2 — шаг, заданный значением аргумента Step. Поскольку начальным значением задано 1, F всегда будет нечетным, что упрощает задачу программирования операторов внутри цикла.

В общем, аргумент Step сообщает VBA, как вычислять следующее значение счетчика по достижении конца цикла. Обычно, когда аргумент Step явно не указан, счетчик увеличивается на 1. Указав аргумент Step, вы можете задать другое значение, на которое нужно будет увеличивать счетчик. При этом можно задать и отрицательное значение, тогда счетчик будет уменьшаться.

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

Похожие главы из других книг

R.6.5 Операторы цикла

R.6.5 Операторы цикла Эти операторы задают виды цикла.оператор-цикла: while ( выражение ) оператор do оператор while ( выражение ) for ( оператор-иниц выражение opt ; выражение opt ) оператороператор-иниц: оператор-выражение оператор-описаниеОбратите внимание, что конструкция

Определение шага привязки

Определение шага привязки В режиме шаговой привязки SNAP курсор может находиться только в определенных точках согласно установленному значению шага и при этом движется не плавно, а скачкообразно между узлами воображаемой сетки, как бы «прилипая» к ее узлам. Активность


Определение шага привязки

Определение шага привязки В режиме шаговой привязки SNAP курсор может находиться только в определенных точках согласно установленному значению шага и при этом движется не плавно, а скачкообразно между узлами воображаемой сетки, как бы «прилипая» к ее узлам.Шаговая

Синтаксис цикла

Синтаксис цикла Синтаксис цикла непосредственно следует из предшествующих соображений, определяющих ингредиенты цикла. Он будет включать элементы, отмеченные как необходимые.[x]. Инвариант цикла inv — утверждение.[x]. Условие выхода exit, чья конъюнкция с inv дает желаемую

Образцы шага, часть 1: оси образца

Образцы шага, часть 1: оси образца Оси — первая часть образцов шага. Например, в образце шага child::NAME, ссылающемся на элемент , дочерний по отношению к контекстному узлу, child называется осью. У образцов две оси:• ось attribute содержит атрибуты контекстного узла;• ось child

Образцы шага, часть 2: условия узла

Образцы шага, часть 2: условия узла Условия узла (node test) составляют вторую часть образцов шага. В качестве условий узла можно использовать названия узлов или символ подстановки * для выбора и узлов, и их типов. Например, выражение child::*/child::NAME выбирает все элементы ,

Оператор цикла с предусловием while

Оператор цикла с предусловием while Синтаксис:while ( ) Действие:Тело оператора цикла while выполняется до тех пор, пока значение не станет ложным (т.е. равным нулю). Вначале вычисляется . Если изначально ложно,

Определение шага привязки

Определение шага привязки В режиме шаговой привязки SNAP курсор может находиться только в определенных точках согласно установленному значению шага и при этом движется не плавно, а скачкообразно между узлами воображаемой сетки, как бы «прилипая» к ее узлам. Активность

Определение шага привязки

Определение шага привязки В режиме шаговой привязки SNAP курсор может находиться только в определенных точках согласно установленному значению шага и при этом движется не плавно, а скачкообразно между узлами воображаемой сетки, как бы «прилипая» к ним. Активность режима

Завершение цикла while

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

17.5.1. Приращение переменной цикла

17.5.1. Приращение переменной цикла Команда expr выполняет приращение переменной цикла. Сначала переменной цикла присваивается начальное значение нуль. Затем добавляется единица. Кавычки применяются для обозначения подстановки команд. Выводимые данные, полученные с

5.5. Инструкция цикла for

5.5. Инструкция цикла for Как мы видели, выполнение программы часто состоит в повторении последовательности инструкций — до тех пор, пока некоторое условие остается истинным. Например, мы читаем и обрабатываем записи файла, пока не дойдем до его конца, перебираем элементы

9.2. Три шага разрешения перегрузки

9.2. Три шага разрешения перегрузки Разрешением перегрузки функции называется процесс выбора той функции из множества перегруженных, которую следует вызвать. Этот процесс основывается на указанных при вызове аргументах. Рассмотрим пример:T t1, t2;void f( int, int );void f( float, float );int

Три шага к свободному ПО

Три шага к свободному ПО Не все знают, что стоимость проприетарного (коммерческого) программного обеспечения, способного превратить «компьютерное железо» в современный компьютер, значительно больше стоимости самого «железа». Не знают зачастую потому, что используют

Операторы цикла

Операторы цикла Для многократного выполнения кода используют операторы цикла. Кроме того, циклы предоставляют удобные средства для манипулирования массивами.Цикл forОператор for служит для создания цикла. Он имеет следующий синтаксис:for (выражение инициализации;

Массивы и циклы в VBA Access 2003

Продолжаем изучать VBA Access, и сегодня мы будем разговаривать о том, как можно использовать циклы и массивы в VBA Access. Как обычно рассмотрим все это на примерах, а также научимся создавать собственный тип данных типа record или «запись», который пригодится как раз, для того чтобы сделать своего рода ассоциативный массив, не совсем конечно, но в некоторых случаях может сильно облегчить Вам реализацию той или иной задачи.

Ранее мы с Вами уже сталкивались с задачами, которые необходимо было реализовать в Access 2003, а конкретней средствами VBA, например, Access – Импорт данных в базу MSSql 2008 или Выгрузка данных в текстовый файл из MSSql 2008 клиентом Access 2003 И там мы как раз сталкивались с циклами, но подробно о них мы не разговаривали, поэтому пришло время поговорить о циклах и еще, об очень полезной штуке в VBA это массивы.

Примечание! Для понимания всего того, о чем мы сегодня будем разговаривать, советую ознакомиться с материалом – Встроенные функции VBA Access.

Циклы в VBA Access

И как Вы поняли, начнем мы с циклов, и если конкретней, то с небольшой теории.

Цикл – это действия (инструкции), которые повторяются неоднократно, и прекращают свое выполнение в зависимости от условий или просто выполняются заданное количество раз.

В VBA, как и в других языках программирования существуют несколько разновидностей циклов, и сейчас самые часто используемые мы рассмотрим.

Цикл For ….. Next – это цикл, который выполняется заданное количество раз, будь то вручную или в зависимости от значения переменной.

Данный цикл просто незаменим тогда, когда необходимо выполнять действие, определенное количество раз, синтаксис его очень прост:

А теперь давайте приведем пару простых примеров для понимания, откроем Access создадим форму, добавим элемент управления «кнопка» и в обработчик события «Нажатия кнопки» вставим следующий код (предполагается, что данные действия Вы уже должны уметь, если нет то вот скриншот):

Это самый простой пример, когда мы сами указали сколько раз будет выполняться наш цикл, результат будет 10 раз, теперь давайте приведем пример чуть посложней:

Догадайтесь сколько раз выполнится цикл? Ответ 3 раза, потому что мы указали шаг равным 2, и еще тогда когда i стало больше 5, мы завершили цикл, т.е.

Visual Basic for Applications (VBA)

Лабораторная работа №1

Получение навыков по записи макросов и запуску их на исполнение различными способами, созданию пользовательских панелей инструментов и пунктов меню.

Задание 1. Начало работы с VBA.

Задание 2. Изучение подпрограмм и процедур VBA

Задание 3 Объекты VBA

Задание 5 Объявление переменных

В приложения, такие как Excel, интегрирован Visual Basic для приложений (VBA), язык программирования, позволяющий расширять возможности этих приложений.

VBA работает, выполняя макросы, пошаговые процедуры, написанные на языке Visual Basic. Овладение даже небольшими навыками программирования на VBA предоставляет пользователю возможность выполнять в Office действия, которые раньше представлялись им невозможными.

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

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

Но VBA предназначен не только для повторяющихся задач. VBA также можно использовать для создания новых возможностей в Excel (например, можно разработать новые алгоритмы анализа данных, а затем воспользоваться возможностями построения диаграмм в Excel для отображения результатов) и для выполнения задач, интегрирующих Excel с другими приложениями Office, такими как Microsoft Access 2010.

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

Порядок выполнения работы:

Задание 1 Начало работы с VBA

Редактор Visual Basic установлен по умолчанию, но должен быть включен на ленте. Для этого необходимо выполнить следующие действия:

1. На вкладке Файл выберите Параметры, чтобы открыть диалоговое окно Параметры Excel.

2. Щелкните Настройка ленты в левой части диалогового окна.

3. В разделе Выбрать команды из, расположенном слева в окне, выберите Популярные команды.

4. В разделе Настройка ленты, который находится справа в диалоговом окне, выберите Основные вкладки, а затем установите флажок Разработчик.

5. Нажмите кнопку ОК.

Рис.1 Вкладка «Разработчик» в Excel 2010

Когда вкладка Разработчик появится в интерфейсе Excel, обратите внимание на местонахождение на вкладке кнопок Visual Basic, Макрос и Безопасность макросов.

Нажмите кнопку Безопасность макросов, чтобы определить, какие макросы могут выполняться и при каких условиях. Хотя неконтролируемый код макроса может серьезно повредить компьютер, условия безопасности, запрещающие выполнять полезные макросы, могут серьезно ухудшить производительность работы. Безопасность макросов — это сложный и важный вопрос, в котором следует разобраться при работе с макросами Excel. Помните, что если при открытии книги, содержащей макрос, между лентой и листом появляется строка Предупреждение системы безопасности: запуск макросов отключен, можно нажать кнопку Включить содержимое, чтобы включить макрос.

Кроме того, в качестве мер безопасности, нельзя сохранить макрос в формате файлов Excel, используемом по умолчанию (XLSX-файлы), вместо этого макрос должен быть сохранен в файл со специальным расширением, XLSM-файл.

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

Пример 1 Создание новой пустой книги:

На вкладке Разработчик нажать кнопку Макрос;

В открывшемся диалоговом окне Макрос в поле Имя макроса ввести его имя, например, Hello;

Нажмите кнопку Создать, чтобы открыть редактор Visual Basic с уже введенной структурой нового макроса (рис.2):

Рис.2 Окно редактора VBA

Sub – это сокращение от Subroutine (подпрограмма), которую в данном случае можно определить как «макрос«. Вызов макроса Hello приведет к выполнению любого кода между строчками Sub Hello() и End Sub.

Дополним макрос оператором MsgBox, чтобы он был похож на следующий код:

MsgBox («Привет, друг!»)

Вернитесь на вкладку Разработчик в Excel, а затем снова нажмите кнопку Макрос.

Выберите макрос Hello в появляющемся списке, а затем нажмите кнопку Выполнить, чтобы вывести небольшое окно сообщения, содержащее текст «Привет, друг!».

Только что был создан и запущен пользовательский код VBA в Excel. Нажмите кнопку ОК в окне сообщения, чтобы закрыть его и закончить выполнение макроса. Если окно сообщения не появляется, проверьте настройки безопасности макросов и перезапустите Excel.

Задание 2 Изучение подпрограмм и процедур VBA

Макрос – это набор инструкций, которые программа выполняет по команде запуска. Инструкции могут соответствовать простым нажатиям клавиш или сложным наборам команд меню. Выделяют три основные разновидности макросов:

Командные макросы, которые состоят из операторов, соответствующих тем или иным командам или параграфам диалоговых окон, записанных в определённом порядке. Основным предназначением таких макросов является изменение внешнего вида окна или объекта.

Пользовательские функции. Эти макросы работают аналогичным образом, как встроенные функции Excel. Они не изменяют среды приложения в отличие от командных макросов.

Макрофункции, представляющие собой сочетание командных макросов и пользовательских функций.

Макросы можно запускать, находясь в той книге, где они были сохранены, из другой рабочей книги, если она открыта, или из личной книги макросов.

Процедуры VBA являются хорошо определёнными блоками кода, выполняющегося вместе. Программы могут переходить от процедуры к процедуре, не взирая на их местонахождение в тексте программы. Существует два типа процедур: подпрограммы и функции.

Подпрограммы делятся на две категории. Одни из них могут применяться как макросы, а другие – не могут. Различие между этими двумя типами основывается на том, передаются ли процедуре значения при её вызове или нет.

Любая подпрограмма имеет следующий синтаксис:

Sub name (arguments)

Список операторов VBA

Где name – имя процедуры, а arguments – это список переменных, представляющих значения, которые передаются процедуре. Их может и не быть, однако скобки должны быть сохранены.

Внимание! Макросу при запуске не могут быть переданы никакие параметры. Однако во время выполнения он может находить нужные ему значения в подпрограммах или функциях.

Функции – это второй тип VBA-процедур. Общее назначение функции – возвращать при вызове единственное значение. Именно этим функции и отличаются от подпрограмм.

Function name (arguments)

Список операторов VBA

Где name – имя функции, а arguments – это список переменных, представляющих значения, которые переданы этой функции. Строка name = expression говорит о том, что имени, определённому в первой строке функции, присваивается значение выражения expression. Оно и становится возвращаемым значением функции.

Описанные в процедурах VBA действия выполняются над переменными или объектами. Переменная — это поименованная область памяти, которая используется для хранения данных в период работы процедуры. Объекты представляют собой средство программного управления приложениями Microsoft Office и созданными с их помощью документами. У объектов VBA есть свойства, которые могут принимать различные значения. Переменные, содержащие ссылку на объект, называются объектными переменными.


Для объявления переменных необходимо написать оператор Dim, имя переменной и тип переменных. Если заранее неизвестен тип переменных, то его можно не писать. Полностью объявление переменной выглядит так:

Dim ИмяПеременной as Type

Где Type – это тип вводимой переменной:

Variant – переменные, тип которых определяется типом последнего присвоенного им значения;

Integer – используется для хранения целых чисел. Например, -375, 375;

String – объявляет строковые переменные. Например, МоёИмя;

Boolean – логические переменные, которые принимают одно из двух значений: Истина (True) либо Ложь (False);

Date – тип переменных для хранения даты и времени;

Object — объявляет объектную переменную.

Широко используемые объекты — это рабочий лист, книга, ячейка, диапазоны ячеек и т.д. В Excel существует очень много объектов. Объект имеется для каждого элемента в каждом меню, для каждой кнопки и рабочего листа в каждой рабочей книге.

У объектов VBA есть свойства, которые могут принимать различные значения. Фактически свойствами являются атрибуты объекта. Например, имя объекта, количество листов (для рабочих книг) и др. Объект в VBA указывается при помощи ссылки. Иногда ссылка состоит из нескольких компонентов, например, Workbooks (“Книга2”) . Worksheets (“Лист1”). Каждая ступень ограничения области отделяется точкой (.).

Пример1 Данная строка указывает VBA удалить заданный лист из рабочей книги:

Workbooks ( “Книга1” ) . Worksheets ( “Лист2”) . Delete

Многие объекты поставляются в версиях единственного и множественного числа — Workbook и Workbooks, Worksheet и Worksheets и т. д. Версии множественного числа называются коллекциями.

Пример2 Ссылка на ячейку В6 любого рабочего листа любой открытой рабочей книги:

Пример3 Если нужно работать с ячейками, меняющимися в процессе работы программы, т.е. каждый раз они определяются заново, используется метод Cells. В скобках данного метода указывается сначала номер строки, а затем номер столбца, например, Cells ( 7 , 2 ) – ссылка на ячейку В7.

При работе со всей строкой или столбцом используются Row и Column.

ActiveCell – свойство, которое возвращает единственную активную ячейку в рабочей книге.

Пример 4 В данном примере переменная m изменяется от 1 до 3. Каждой ячейке В1, В2 и В3 присваивается вычисленное значение:

Range (“ B4 : E6 ”) . Select – данный оператор выделяет диапазон ячеек B4 : E6.

Cells ( m , 2 ) = m * 12

Row (4). Select — данный оператор выделяет всю четвёртую строку рабочего листа.

Пример 5 Записи макроса, переименовывающего лист:

Код в редакторе Visual Basic должен быть похож на следующий код:

‘Переименовать макрос рабочий лист

Sheets(«Лист1»).Name = «Новое Имя»

Первые четыре строки после строки Sub – это комментарии. Любая строка, начинающаяся с апострофа, является комментарием и не влияет на действия макроса. В основном комментарии используются для следующих целей:

· Упростить понимание кода, если впоследствии может понадобиться изменить код;

· Чтобы временно отключить строку кода (закомментировать) при отладке программы.

Следующая строка использует метод Select, чтобы выбрать член Sheet1 (Лист1) объекта коллекции Sheets. В коде VBA обычно не нужно выбирать объекты перед работой с ними, поэтому эта строка кода является избыточной, и её можно удалить.

Последняя строка записанного макроса изменяет свойство «Name» члена Sheet1 коллекции Sheets. Эту строку нужно сохранить.

Выполните макрос. Имя должно измениться обратно на «Новое имя».

Задание 3 Программирование на VBA

Чтобы решить задачу, используя программирование на VBA, необходимо сначала понять, с какими объектами будет работать код. Важным средством изучения этих сведений является Справочник по объектной модели Excel, входящий в справочное руководство разработчика по Excel 2007 в библиотеке MSDN.

Рис.3 Справочник по объектной модели Excel на сайте MSDN

Прежде всего надо понять, как управлять конкретными объектами, нужными для решения задачи, например, листами, именами листов, ячейками и содержимым ячеек. В Excel существует по крайней мере два способа решения этой проблемы:

• Непосредственное использование справочного руководства по объектной модели;

• Запись нескольких автоматизируемых действий, просмотр того, как записанный код работает с объектами, и последующее обращение к справочному руководству по объектной модели за дополнительными сведениями.

Выбираемый подход зависит от личных предпочтений.

Попробуйте изучить коллекцию Sheets, используемую при записи макроса. Раздел «Листы» в справочном руководстве по объектной модели содержит следующий текст:

«Коллекция Sheets может содержать объекты Chart или Worksheet. Если нужно работать только с листами одного типа, просмотрите раздел об объекте этого типа листа». В нашем примере используется только коллекция Worksheets, поэтому можно изменить код следующим образом:

Worksheets(«Лист1»).Name = «Новое Имя»

Порядок действий по записи макроса:

1. Запишите действия, которые нужно кодировать;

2. Просмотрите код и найдите строки, выполняющие действия;

3. Удалите оставшуюся часть кода;

4. Измените записанный код;

5. Добавьте переменные, управляющие структуры и другой код, который невозможно записать при записи макроса.

Написанный в примере код позволяет изменить имя только одного листа. В макрос можно добавить по строке для каждого переименовываемого листа, но если неизвестно ни число листов, ни их текущие имена, то используются циклы.

Предположим, что есть книга, содержащая списки на множестве листов, и нужно изменить имя каждого листа в соответствии с заголовком списка на этом листе. Не каждый лист содержит список, но если список есть, его заголовок находится в ячейке B1, а если списка нет, ячейка B1 оказывается пустой. Имена листов без списков не должны изменяться.

Обычно это могло быть сложной задачей, состоящей из просмотра каждого листа, проверки наличия списка, копирования его имени, если оно есть, щелчка вкладки листа и вставки нового имени. Вместо выполнения всех действий вручную воспользуйтесь возможностями Excel VBA, чтобы переименовать листы автоматически.

В VBA есть конструкция, называемая циклом For Each и идеально подходящая для этого случая. Цикл For Each проверяет все элементы в объекте коллекции, таком как Worksheets, и может использоваться для выполнения действия (например, изменения имени) над некоторыми или над всеми этими элементами.

Дополнительные сведения о цикле For Each смотрите в справочном руководстве по языку VBA. Щелкните «Visual Basic Conceptual Topics» (Концептуальные темы Visual Basic), затем «Using For Each. Next Statements» (Использование инструкций For Each. Next).

Используя третий пример в разделе «Using For Each. Next Statements» (Использование инструкций For Each. Next), измените макрос так, чтобы он стал похож на следующий код:

For Each myWorksheet In Worksheets

myWorksheet.Name = «Новое Имя»

Здесь myWorksheet является переменной, то есть ее значение меняется. В этом случае переменная myWorksheet последовательно представляет каждый лист в коллекции Worksheets. Необязательно использовать myWorksheet, можно использовать «x», «ws», «WorksheetToRenameAfterTheContentsOfCellB1» или, с небольшими ограничениями, практически любое желательное имя. Желательно использовать имена переменных таким образом, чтобы они могли напомнить о смысле этой переменной, но не настолько длинных, т.к. это загромождать код.

Выполнение макроса в его текущем состоянии приведет к ошибке, так как Excel требует, чтобы имя каждого листа в книге было уникальным, а строка myWorksheet.Name = «Новое Имя» указывает Excel присваивать всем листам одно и то же имя.

Чтобы исправить строку так, чтобы можно было проверить работу цикла For Each, измените строку следующим образом.

myWorksheet.Name = myWorksheet.Name & «-changed»

Вместо попытки присвоить каждому листу одно и то же имя, эта строка изменяет текущее имя каждого листа (myWorksheet.Name) на текущее имя с добавлением суффикса «-changed», «-изменённый»:

myWorksheet.Name = myWorksheet.Name & » -changed»

Вместо попытки присвоить каждому листу одно и то же имя, эта строка изменяет текущее имя каждого листа (myWorksheet.Name) на текущее имя с добавлением суффикса «-changed».

Теперь нужно найти способ извлекать данные из самих листов, конкретно из ячейки B1 каждого листа, и помещать эти данные в имена листов.

Если открыть справочное руководство по объектной модели и попытаться найти объект Cell (ячейка), окажется, что там никакого объекта Cell нет, но есть объект CellFormat.

Раздел объекта CellFormat в первом примере содержит код

‘ Set the interior of cell A1 to yellow.

Предполагается, что объект Range (диапазон) используется, чтобы задать диапазон ячеек или только одну отдельную ячейку. Понадобится найти, как ссылаться на содержимое объекта Range, а не на сам объект Range. Если перейти к разделу Range, можно прочитать, что у объекта Range есть и Methods, и Properties. Содержимым объекта Range является сущность, не действие, поэтому это, скорее всего, будет Property. Если просмотреть список, можно найти свойство Value. Поэтому попробуем следующий код:

For Each myWorksheet In Worksheets

Выполнение этого кода для книги, содержащей листы с пустой ячейкой B1, приведет к ошибке, так как значение свойства Value пустого диапазона Range равно «» (пустая текстовая строка), которое не является допустимым именем листа. Для примера сделайте три листа книги похожими на показанные на рис.4, а затем выполните макрос:

Рис.4. Пример данных для макроса RenameWorksheets

Имена листов изменятся соответствующим образом.

Если любая из ячеек B1 книги оказывается пустой, макрос приводит к ошибке. Вместо ручной проверки каждого листа можно запрограммировать макрос так, чтобы эти действия выполнялись в нем. Перед строкой myWorksheet.Name добавьте следующую строку кода:

If myWorksheet.Range(«B1»).Value <> «» Then

А после строки myWorksheet.Name добавьте следующий текст:

Такой код называется инструкцией If…Then. Инструкция If…Then указывает Excel выполнять весь код между строкой If и строкой End If, но только при выполнении условия, приведенного в строке If. В примере проверяемое условие задается следующей строкой:

Знаки <> означают «не равно», а знаки кавычек, между которыми ничего нет, обозначают пустую текстовую строку, то есть полное отсутствие текста. Следовательно, все строки кода между If и End If будут выполнены только если значение в ячейке B1 не пусто, то есть, когда ячейка B1 содержит текст.

Дополнительные сведения об инструкции If…Then см. в справочном руководстве по языку VBA. Полное название раздела — «If…Then…Else statement» (Инструкция If…Then…Else), где Else — это необязательный компонент.

Задание 5 Объявление переменных

Хотя объявления переменных в VBA не являются обязательным, в начало макроса целесообразно внести объявления переменной myWorksheet:

Dim myWorksheet As Worksheet

Объявление переменных упрощает отслеживание переменных и обнаружение ошибок в коде. Кроме того, при объявлении переменной с типом объекта (например, Worksheet) IntelliSense выводит соответствующий список свойств и методов, связанных с объектом, при последующем использовании этой переменной объекта в макросе.

Dim является сокращением в начало макроса объявления переменной myWorksheet.от «Dimension» (размерность), а Worksheet — это тип этой конкретной переменной. Эта инструкция сообщает VBA, какой тип сущности представляет переменная myWorksheet. Обратите внимание, что после введения As, редактор Visual Basic выводит всплывающую подсказку, содержащую перечень всех доступных типов переменных. Это пример технологии IntelliSense, то есть редактор Visual Basic реагирует на то, что, как он считает, пытается сделать пользователь, и предлагает список соответствующих вариантов. Можно выбрать вариант из списка или продолжить ввод.

Так как макрос стал достаточно сложным, в него следует добавить несколько комментариев, напоминающих, что делает код. Количество используемых комментариев – вопрос личного стиля, но в общем случае слишком много комментариев лучше, чем слишком мало комментариев. Со временем код обычно нужно изменять и обновлять. Без комментариев может быть трудно понять, что делается в коде, особенно когда лицо, изменяющее код, не является автором первоначального кода.

Добавление комментариев для условия If и для строки, переименовывающей листы, приводит к появлению следующего кода:

Dim myWorksheet As Worksheet

For Each myWorksheet In Worksheets

‘make sure that cell B1 is not empty

If myWorksheet.Range(«B1»).Value <> «» Then

‘rename the worksheet to the contents of cell B1

Чтобы проверить макрос, переименуйте листы обратно в Лист1, Лист2 и Лист3 и удалите содержимое ячейки B1 на одном или нескольких листах. Выполните макрос, чтобы проверить, что он переименовывает листы с текстом в ячейке B1 и оставляет нетронутыми остальные листы. Макрос работает для любого числа листов, с любой комбинацией заполненных и пустых ячеек B1.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Увлечёшься девушкой-вырастут хвосты, займёшься учебой-вырастут рога 9791 — | 7666 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Илон Маск рекомендует:  Объединение колонок
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL