Сегодня мы рассмотрим: Настоящие ценители музыки знают, что для качественного...
Мы вкратце познакомились с записью макроса при помощи рекордера Excel. Сейчас мы углубимся в эти дебри и напишем для примера пару простейших макросов. В одном из примеров по традиции продемонстрируем работу с диалоговым окном типа «Сообщение», в другом расширим наше диалоговое окно.
Пример 1. Простое диалоговое сообщение msgBox в VBA
Не будем отступать от традиций начала всех примеров программирования. Напишем макрос, который при запуске выдаст нам окно сообщения с надписью «Hello World». Заодно рассмотрим работу с пользовательскими диалогами.
Теперь писать макросы будем только в ручном режиме, никаких рекордеров!
Итак, для того чтоб создать макрос, Вам необходимо открыть окно всеми любимого редактора Visual Basic (VB). Для этого выполняем следующие действия: Сервис-Макрос-Редактор Visual Basic (Alt+F11).
Откроется окно редактора MS Visual Basic.
Если у Вас отсутствуют левые окна, то их необходимо включить. Для этого нажмите F4 – Открывает окно свойств Properties Window, и сочетание клавиш Ctrl+R – открывает окно Project Explorer. Без этих окон в дальнейшем затруднительно работать. Все! Сделали.
Что мы видим в окне Project ? В данном окне отражается как раз таки структура нашей книги. Объекты книги – Лист1, 2, 3, Эта книга. Более подробно изучим данные объекты в последующих статьях, а пока возвращаюсь к примеру.
Что необходимо сделать для того чтоб начать писать код? Необходимо создать модуль. Примечание: Вообще, в дальнейшем рекомендую разделять код обработчиков на разные модули. Это облегчит понимание кода и создаст порядок в структуре.
Создаем модуль: Insert – Module
Перед нами открылось пустое окно модуля, напоминает блокнот. Такое окно мы уже видели, когда записывали первый макрос в . По правилам «хорошего тона» дадим имя нашему модулю, назовем его «MacroBook ». Для этого перейдите в окно свойств и введите имя в поле (Name)
Переходим в окно редактирования кода и пишем следующее:
Готово! Открываем окно рабочей книги Excel, жмем Alt+F8 и видим наш макрос «Hello»
Остается только «Выполнить ». В результате работы макроса мы получим сообщение следующего вида и содержания:
Пример 2. Расширенное диалоговое сообщение msgBox в VBA
Рассмотрим еще один вид диалоговых сообщений, которые содержат дополнительные кнопки «Да», «Нет», «Отмена»
Переходим к коду нашего макроса «Hello» и дописываем к команде msgbox следующее:
MsgBox "Hello, World!", vbYesNoCancel, "Мой макрос"
Обратите внимание, когда вы поставите запятую после «Hello, World!», у Вас должен появиться список всех доступных типов диалоговых окон
Поэкспериментируйте с каждым для понимания.
Запустим наш макрос
Теперь у нас открылась совсем иная форма сообщения.
На этом пока все. Следите за выходом статей и уроков. Если возникли вопросы, с удовольствием отвечу, а если будет необходимо, напишу статью с пояснением.
Видео: Пример работы msgbox в vba
Следующие простые примеры макросов Excel иллюстрируют некоторые возможности и приёмы, описанные в самоучителе по Excel VBA .
Макрос Excel: пример 1
Первоначально эта процедура Sub была приведена, как пример использования комментариев в коде VBA. Однако, здесь также можно увидеть, как объявляются переменные, как работают ссылки на ячейки Excel, использование цикла For , условного оператора If и вывод на экран окна сообщения.
"Процедура Sub выполняет поиск ячейки, содержащей заданную строку "в диапазоне ячеек A1:A100 активного листа Sub Find_String(sFindText As String) Dim i As Integer "Целое число типа Integer, используется в цикле For Dim iRowNumber As Integer "Целое число типа Integer для хранения результата iRowNumber = 0 "Просматривает одну за другой ячейки A1:A100 до тех пор, пока не будет найдена строка sFindText For i = 1 To 100 If Cells(i, 1).Value = sFindText Then "Если совпадение с заданной строкой найдено "сохраняем номер текущей строки и выходим из цикла For iRowNumber = i Exit For End If Next i "Сообщаем пользователю во всплывающем окне найдена ли искомая строка "Если заданная строка найдена, указываем в какой ячейке найдено совпадение If iRowNumber = 0 Then MsgBox "Строка " & sFindText & " не найдена" Else MsgBox "Строка " & sFindText & " найдена в ячейке A" & iRowNumber End If End Sub
Макрос Excel: пример 2
Следующая процедура Sub – пример использования цикла Do While . Здесь также можно увидеть, как объявляются переменные, работу со ссылками на ячейки Excel и применение условного оператора If .
"Процедура Sub выводит числа Фибоначчи, не превышающие 1000 Sub Fibonacci() Dim i As Integer "Счётчик для обозначения позиции элемента в последовательности Dim iFib As Integer "Хранит текущее значение последовательности Dim iFib_Next As Integer "Хранит следующее значение последовательности Dim iStep As Integer "Хранит размер следующего приращения "Инициализируем переменные i и iFib_Next i = 1 iFib_Next = 0 "Цикл Do While будет выполняться до тех пор, пока значение "текущего числа Фибоначчи не превысит 1000 Do While iFib_Next < 1000 If i = 1 Then "Особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "Сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "Выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "Вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub
Макрос Excel: пример 3
Эта процедура Sub просматривает ячейки столбца A активного листа до тех пор, пока не встретит пустую ячейку. Значения записываются в массив. Этот простой макрос Excel показывает работу с динамическими массивами, а также использование цикла Do Until . В данном примере мы не будет совершать какие-либо действия с массивом, хотя в реальной практике программирования после того, как данные записаны в массив, над ними такие действия, как правило, совершаются.
"Процедура Sub сохраняет значения ячеек столбца A активного листа в массиве Sub GetCellValues() Dim iRow As Integer "Хранит номер текущей строки Dim dCellValues() As Double "Массив для хранения значений ячеек iRow = 1 ReDim dCellValues(1 To 10) "Цикл Do Until перебирает последовательно ячейки столбца A активного листа "и извлекает их значения в массив до тех пор, пока не встретится пустая ячейка Do Until IsEmpty(Cells(iRow, 1)) "Проверяем, что массив dCellValues имеет достаточный размер "Если нет – увеличиваем размер массива на 10 при помощи ReDim If UBound(dCellValues) < iRow Then ReDim Preserve dCellValues(1 To iRow + 9) End If "Сохраняем значение текущей ячейки в массиве dCellValues dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop End Sub
Макрос Excel: пример 4
В этом примере процедура Sub считывает значения из столбца A рабочего листа Лист2 и выполняет с ними арифметические операции. Результаты заносятся в ячейки столбца A на активном рабочем листе. В этом макросе продемонстрировано использование объектов Excel. В частности, производится обращение процедурой Sub к объекту Columns , и показано, как доступ к этому объекту осуществляется через объект Worksheet . Показано так же, что при обращении к ячейке или диапазону ячеек на активном листе, имя этого листа при записи ссылки указывать не обязательно.
"Процедура Sub при помощи цикла считывает значения в столбце A рабочего листа Лист2, "выполняет с каждым значением арифметические операции и записывает результат в "столбец A активного рабочего листа (Лист1) Sub Transfer_ColA() Dim i As Integer Dim Col As Range Dim dVal As Double "Присваиваем переменной Col столбец A рабочего листа Лист 2 Set Col = Sheets("Лист2").Columns("A") i = 1 "При помощи цикла считываем значения ячеек столбца Col до тех пор, "пока не встретится пустая ячейка Do Until IsEmpty(Col.Cells(i)) "Выполняем арифметические операции над значением текущей ячейки dVal = Col.Cells(i).Value * 3 - 1 "Следующая команда записывает полученный результат в столбец A активного рабочего листа "Имя листа в ссылке указывать нет необходимости, так как это активный лист. Cells(i, 1) = dVal i = i + 1 Loop End Sub
Макрос Excel: пример 5
Данный макрос показывает пример кода VBA, отслеживающего событие Excel. Событие, к которому привязан макрос, происходит каждый раз при выделении ячейки или диапазона ячеек на рабочем листе. В нашем случае при выделении ячейки B1 , на экран выводится окно с сообщением.
"Данный код показывает окно с сообщением, если на текущем рабочем листе "выбрана ячейка B1 Private Sub Worksheet_SelectionChange(ByVal Target As Range) "Проверяем выбрана ли ячейка B1 If Target.Count = 1 And Target.Row = 1 And Target.Column = 2 Then "Если ячейка B1 выбрана, выполняем необходимое действие MsgBox "Вы выбрали ячейку B1" End If End Sub
Макрос Excel: пример 6
На примере этой процедуры показано использование операторов On Error и Resume для обработки ошибок. В данном коде также показан пример открытия и чтения данных из файла.
"Процедура Sub присваивает аргументам Val1 и Val2 значения ячеек A1 и B1 "из рабочей книги Data.xlsx, находящейся в папке C:\Documents and Settings Sub Set_Values(Val1 As Double, Val2 As Double) Dim DataWorkbook As Workbook On Error GoTo ErrorHandling "Открываем рабочую книгу с данными Set DataWorkbook = Workbooks.Open("C:\Documents and Settings\Data") "Присваиваем переменным Val1 и Val2 значения из заданной рабочей книги Val1 = Sheets("Лист1").Cells(1, 1) Val2 = Sheets("Лист1").Cells(1, 2) DataWorkbook.Close Exit Sub ErrorHandling: "Если файл не найден, пользователю будет предложено поместить искомый файл "в нужную папку и после этого продолжить выполнение макроса MsgBox "Файл Data.xlsx не найден! " & _ "Пожалуйста добавьте рабочую книгу в папку C:\Documents and Settings и нажмите OK" Resume End Sub
Содержание этой страницы будет наращиваться постоянно...
Программа-калькулятор "Возведение чисел в большие степени".
Реализовать точное вычисление возведения в большие степени однозначных чисел (от 2 до 9) с помощью длинной арифметики.
С форума от Jonny323. VBA Word
Привет всем. Очень нужен макрос, думаю не сложный: Печать первой страницы в 6 экземплярах и 2ой страницы в 2 экземплярах.Заранее спасибо.
ProgressBar на форме. VBA Excel
Элемент управления, который показывает ход выполнения программы (сколько сделано работы из 100%)...
Статистические подсчеты в выделенном тексте. VBA Word
Создать в Word макрос, который определит количество слов, запятых и точек в произвольном тексте.
Словами будем называть группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя. Внутри слова не могут находиться точки или запятые. Многоточие не считается за точки…Статистические подсчеты в тексте документа. Использование UserForm для ввода данных. VBA Word
Создать в Word программу - В форме пользователь вводит слово или словосочетание, а программа просматривает весь текст и вставляет в конце документа введенное слово (словосочетание), рядом с которым перечислены все номера страниц, на которых это слово встречается. Совпадения номеров страниц не допускаются. То есть если указанное слово на странице 5 встречается три раза, номер 5 в выводе указывается только один раз. Форма должна состоять из следующих компонентов:
- 1 TextBox для ввода слова (словосочетания);
- 1 кнопка для выхода из программы;
- 1 кнопка для запуска поиска и вставки результата в документ;
- компонент типа Label с поясняющим текстом над строкой ввода;
- Кроме того, на форме могут быть компоненты типа Frame;Работа с ListBox (Excel). Привязка, сортировка, множественный выбор...
Программа для решения японской головоломки Судоку (Excel)
Макросы выполнения запросов (т.е. формирование новой таблицы из базы данных Excel)
Сортировка Хоара (алгоритм с wikipedia.org)
Один из самых быстрых методов сортировки.Сортировка Слиянием (с использованием Хоара)
Один из самых быстрых и оптимальных методов сортировки.VBA Excel: Программа расчета биоритмов человека
Для blackarrow с programmersforum.ru
Определить в какую координатную четверть
попадает точка с заданными координатами А(а,b). VBA EXCEL.Представление целого числа прописью VBA EXCEL.
ЛОГИКА.
Решение квадратного уравнения.VBA EXCEL.
VBA EXCEL. Задача о треугольнике. Массив, цикл, логика.
По заданным размерам трех сторон треугольника - определить его вид (прямоугольный, тупоугольный, остроугольный или невозможно построить).Будильник (alarm clock) в Excel
VBA EXCEL.
VBA EXCEL.
VBA EXCEL.
Макрос, который в выделенном диапазоне представляет все отрицательные числа синим цветом, положительные - красным, нулевые – белым (или желтым).
VBA EXCEL. Как скрыть или отобразить элементы листа.
Иногда, требуется скрыть от пользователя некоторые возможности (как правило, скрывается размещение данных):
- посещать другие листы данной книги (лучше не знать о них);
- прокручивать (горизонтально и вертикально) лист
- читать и изменять формулы в ячейках листа
- скрывать линии столбцов и строк
- скрывать заголовки (названия и номера) столбцов и строкVBA EXCEL. Добавить и удалить пункт меню.
Не сложно добавить (удалить) собственный пункт в меню Excel. Это все описано в справке.
Но куда интересней поручить эту работу макросу.
Тогда появляется возможность при открытии конкретного документа формировать специальное, индивидуальное меню, а после его закрытия привести меню Excel в первоначальное состояние. (Данный пример кода работает только в MS Excel 2003, а в 2007 нужны изменения названий панелей управления)Клеточные автоматы VBA EXCEL.
Метод Золотого сечения VBA EXCEL.
Замена местами максимального и минимального значений ячеек выделенного диапазона. VBA Excel
Разработать программу или пользовательскую форму для нахождения и перестановки местами элементов с максимальным и минимальным значением выделенного диапазона рабочей таблицы
Строковая функция, возвращающая квадраты простых чисел от нуля до заданного числа. VBA Excel
Составить в Excel функцию, получающую натуральное число N и возвращающее квадраты всех простых чисел от 0 до заданного натурального N.
Пользовательская форма (UserForm) для ввода данных по кредитам коммерческого банка. VBA Excel
Организуйте ввод сведений в таблицу, содержащую данные о выдаче долгосрочных кредитов коммерческим банком со следующими данными: код получателя кредита, наименование получателя кредита, дата выдачи кредита, срок (3-4 срока), на который выдан кредит (в днях), процент, сумма кредита, дата оплаты процентов по кредиту.
Пользовательская форма (UserForm) для ввода данных по Регистрации туристов. VBA Excel
на этом самом месте...
Цель работы – Изучение основных операторов и реализации основных конструкций программирования в языке VBA.
4.1 Основные этапы работы с программами на vba в Excel
Для подготовки и выполнения программы на языке VBA требуется выполнить следующее:
в Excel выбрать из меню команду Сервис – Макрос – Редактор Visual Basic ;
в появившемся окне выбрать из меню команду Insert – Module . Создается модуль, т.е., упрощенно говоря, открывается окно, в котором можно вводить текст программы.
В начале модуля может указываться инструкция Option Explicit . Если она указана, то все переменные, используемые в программе, необходимо будет объявлять в операторе Dim (подробнее об этом см. в подразделе 4.3).
В некоторых случаях, в зависимости от настройки среды VBA, инструкция Option Explicit указывается в начале модуля автоматически. Если программист желает использовать переменные, не объявляя их в операторе Dim , то инструкцию Option Explicit необходимо удалить.
Для запуска программы на выполнение необходимо выбрать из меню команду Run – Run Sub/UserForm .
4.2 Простейший пример программы на языке vba
Пример 4.1 – Программа, возводящаяуказанное число a в указанную степень b .
Dim a As Single, b As Single
a = InputBox(“Введите основание: ”)
b = InputBox(“Введите показатель степени: ”)
x = a^b ‘Возведение в степень
MsgBox(“Результат равен ” & x)
Здесь слово Sub обозначает начало процедуры; ее имя в данном случае – primer 4_1 . Программа на языке VBA всегда состоит из одной или нескольких процедур (в данном случае – из одной).
Символ ‘ (одиночная кавычка) обозначает начало комментария. Текст комментария может быть любым.
Dim – оператор объявления переменных. В данном случае указано, что переменные a и b имеют тип Single . т.е. могут представлять собой как целые, так и дробные числа. Подробнее типы данных и объявление переменных будут рассмотрены в подразделе 4.3.
InputBox – функция для ввода значения переменной. Строка a = InputBox (“Введите основание: ”) означает, что вводится значение переменной a ; при этом на экран выводится сообщение “Введите основание:” . Строка x = a ^ b – оператор присваивания: вычисляется значение правой части (в данном случае переменная a возводится в степень b ), и результат присваивается переменной, указанной в левой части (в данном случае – переменной x ). Строка MsgBox (“Результат равен ” & x ) означает, что на экран выводится сообщение “Результат равен ” и значение переменной x .
Примечание – Знак & в функции MsgBox предназначен для сцепления нескольких элементов данных, которые требуется вывести на экран, в данном примере – строки “Результат равен” и переменной x . Аналогично знак & может использоваться в функции InputBox (примеры такого использования будут приведены далее). Перед знаком & и после него обязательно должны быть указаны пробелы.
В одной строке можно разместить несколько операторов языка VBA. Для этого они разделяются символами «двоеточие». Так, программу из примера 4.1 можно было записать, например, следующим образом:
‘Первый пример программы на VBA
Dim a As Single, b As Single
a = InputBox(“Введите основание: ”) : b = InputBox(“Введите показатель степени: ”)
x = a^b: MsgBox(“Результат равен ” & x) ‘Возведение в степень и вывод результата
В рассмотренном примере использована процедура, называемая подпрограммой. Такая процедура начинается со слова Sub . В программе на VBA всегда имеется хотя бы одна процедура-подпрограмма. Кроме того, в языке VBA имеется еще один вид процедур – функции. Процедура-функция начинается со слова Function . Использование таких процедур будет рассмотрено в подразделе 4.9.