новый код в vba
Код VBA
Код Excel VBA
Код VBA можно определить как код, который вводится в окне Visual Basic для выполнения набора инструкций или действий в Excel и предоставления результатов. С помощью кода VBA мы можем сократить время на выполнение повторяющейся задачи, не требуется большого вмешательства человека, кроме как для запуска программы. Теперь мы увидим, как открыть окно Visual Basic, как написать в нем код, как запустить и как его сохранить.
Как открыть окно Visual Basic?
Если вы хотите написать код Visual Basic, мы должны написать его в окне Visual Basic. Вопрос здесь в том, где находится окно Visual Basic в Excel и как его открыть. Ответ заключается в выборе меню « Разработчик» и в меню разработчика выберите « Visual Basic», как показано на рисунке ниже.
Который откроет пустое окно, как показано ниже.
Легко и круто выглядит правильно. Но если Excel не имеет вкладки разработчика. Нам нужно добавить вкладку разработчика с помощью следующих шагов.
Шаг 2: Появится раскрывающийся список, нажмите на вкладку « Параметры ».
Шаг 4: Когда мы перетаскиваем параметры настройки ленты, мы находим параметр для разработчика (Custom), нам нужно установить этот флажок, который позволит нам использовать VBA в Excel.
Где написать код в Excel VBA?
Если мы добавим несколько листов в нашу книгу, это позволит использовать разные модули листов.
Код модуля листа: независимо от того, какой код события мы напишем в модуле листа, он будет применяться только к этому листу.
Вы можете быть в замешательстве, что такое код события. VBA поставляется с несколькими событиями, показанными на скриншоте выше, такими как изменение, деактивация и многое другое. Всякий раз, когда это событие произошло, макрос будет запускаться.
Модуль ThisWorkbook
Какой бы код не был написан в этом модуле, он будет применяться ко всем листам в рабочей книге. Предположим, что если мы напишем код события для рабочей книги, то всякий раз, когда это событие происходит на каком-либо из листов рабочей книги, будет выполняться макрос. Предположим, что если мы напишем событие для «Новый лист», то всякий раз, когда мы создаем новый лист, для этой книги будет запускаться макрос.
Модуль: Обычно мы будем писать код в модулях на VBA. Нам нужно вставить модуль, щелкнув по меню «Вставка» и выбрав опцию модуля, чтобы вставить модуль.
Точно так же мы можем вставить модуль класса и форму пользователя также. Это модули, в которые мы можем написать наш код. В зависимости от типа требования мы должны выбрать модуль и написать в нем код.
Примеры написания и запуска кода в Excel VBA
Ниже приведены различные примеры написания и запуска кода с использованием кода VBA в Excel.
Теперь мы увидим пример макрокода с использованием обычного модуля. Когда мы вставим новый модуль, пустое окно будет выглядеть так, как показано ниже.
Выполните следующие шаги, чтобы написать код в Excel VBA.
Шаг 1: Любая программа в VBA начинается с дополнительного ключевого слова и имени программы с открытыми и закрытыми скобками, как показано ниже. Когда мы введем после скобок автоматически появится «End Sub».
Шаг 2: между ними мы должны написать наш код.
Шаг 3: Мы можем запустить код, нажав F5 или щелкнув по кнопке запуска вверху, которая отмечена черным цветом.
Шаг 4: Как только мы нажмем на запуск, всплывающее окно попросит выполнить запуск, как показано ниже. Если доступно несколько макросов, необходимо выбрать правильный макрос и нажать кнопку запуска.
Шаг 5: перейдите в Excel и проверьте, появляются ли результаты, как показано ниже.
Если мы хотим запустить макрос из самого листа с помощью фигуры, мы можем это сделать. Выполните следующие шаги, чтобы назначить макрос фигурам.
Шаг 1: Перейдите на «Вставка» и выберите фигуру по вашему желанию.
Шаг 2: После выбора формы нарисуйте это на своем рабочем листе.
Шаг 3: Теперь мы можем написать текст, например, «нажмите здесь» или «запустить макрос» в этой форме. Для добавления текста просто щелкните правой кнопкой мыши на фигуре и выберите Редактировать текст
Шаг 4: Добавьте слово согласно вашему желанию. Я добавил слово « Run Macro ».
Шаг 5: Теперь нам нужно назначить макрос для этой фигуры, для этого выберите фигуру, щелкните правой кнопкой мыши и выберите « Назначить макрос ».
Шаг 6: появится всплывающее окно с запросом выбора макроса. Выберите имя макроса и нажмите кнопку ОК.
Шаг 7: Теперь, если мы нажмем на форму, макрос запустится и выдаст результат, как показано ниже.
Как сохранить макрокоманду?
Мы все знаем, как сохранить рабочую книгу. Сохранение макроса также не изменилось, но есть одно небольшое изменение. У нас есть два разных способа сохранить наши макро-файлы.
Когда вы сохраняете книгу, нам нужно выбрать тип файла из списка параметров типа файла, как показано ниже.
По умолчанию мы можем использовать « книгу с макросами Excel ». В случае, если вы хотите использовать в качестве стандартного файла в качестве отправной точки для других файлов, используйте формат «Шаблон макросов Excel».
То, что нужно запомнить
Рекомендуемые статьи
Это руководство по VBA Code в Excel. Здесь мы узнаем, как копировать, вставлять и запускать код VBA в Excel вместе с простыми и практичными примерами. Ниже приведены несколько полезных статей о Excel, связанных с VBA.
VBA Excel. Функции для работы с датой и временем
Функции для работы с датой и временем в VBA Excel. Синтаксис, параметры, спецсимволы, примеры. Функции, возвращающие текущие дату и время по системному таймеру.
Функция Date
Синтаксис
Пример
Функция DateAdd
Синтаксис
Параметры
Параметр | Описание |
---|---|
interval | Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, который требуется добавить. |
number | Обязательный параметр. Числовое выражение, задающее количество интервалов, которые необходимо добавить. Может быть как положительным (возвращается будущая дата), так и отрицательным (возвращается предыдущая дата). |
date | Обязательный параметр. Значение типа Variant/Date или литерал, представляющий дату, к которой должен быть добавлен интервал. |
Таблицу аргументов (значений) параметра interval смотрите в параграфе «Приложение 1».
Примечание к таблице аргументов: три символа – y, d, w – указывают функции DateAdd на один день, который необходимо прибавить к исходной дате number раз.
Пример
Функция DateDiff
Синтаксис
Параметры
Таблицу аргументов (значений) параметра interval смотрите в параграфе «Приложение 1».
Параметры firstdayofweek и firstweekofyear определяют правила расчета количества недель между датами.
Таблицы констант из коллекций firstdayofweek и firstweekofyear смотрите в параграфах «Приложение 2» и «Приложение 3».
Оператор New (Visual Basic)
Вводит New предложение для создания нового экземпляра объекта, задает ограничение конструктора для параметра типа или определяет Sub процедуру как конструктор класса.
Комментарии
В объявлении или операторе присваивания в New предложении необходимо указать определенный класс, из которого можно создать экземпляр. Это означает, что класс должен предоставлять один или несколько конструкторов, к которым вызывающий код может получить доступ.
Предложение можно использовать New в операторе объявления или в операторе присваивания. При выполнении инструкции вызывается соответствующий конструктор указанного класса, передавая все предоставленные аргументы. В следующем примере демонстрируется создание экземпляров Customer класса, который имеет два конструктора, один из которых не принимает параметры и один принимает строковый параметр:
Поскольку массивы являются классами, New может создать новый экземпляр массива, как показано в следующем примере:
Среда CLR выдает OutOfMemoryException ошибку, если недостаточно памяти для создания нового экземпляра.
New Ключевое слово также используется в списках параметров типов, чтобы указать, что предоставленный тип должен предоставлять доступный конструктор без параметров. Дополнительные сведения о параметрах типа и ограничениях см. в разделе Type List.
Чтобы создать процедуру конструктора для класса, задайте в качестве имени Sub процедуры New ключевое слово. Дополнительные сведения см. в разделе время существования объекта: как создаются и уничтожаются объекты.
Ключевое слово New можно использовать в следующих контекстах:
Язык Visual Basic — примеры написания кода
Всем привет, в этой статье я хочу показать Вам полезные коды небольших программ. Которые Вы можете использовать для написания уже своих более серьезных программ, ну или Вы искали именно эти функции, которые здесь описаны.
Все коды использовались в среде программирования Microsoft Visual Basic v6.0.
Выход с подтверждением
Первая своего рода программка, ну или функция, это выход с сообщением о подтверждение выхода. В общем, откройте среду программирования Visual Basic, создайте стандартный проект, потом поместите на форму одну кнопку, щелкните на кнопке и у Вас откроется окно редактирования кода, и туда Вам необходимо вставить следующий код:
Итак, Beep это просто звуковой сигнал, дальше идет выделение памяти (Dim), потом уже выполняется действие, т.е. сообщение «Хотите выйти?», да или нет и конец программы. Вот такая бесполезная функция можете использовать в своих программах.
Пароль на запуск программы
Далее идет очень полезный код, это пароль на запуск программы, ну или для чего-нибудь другого. Открывайте стандартный проект щелкните в пустом месте (загрузка формы программы) и вставляйте следующее:
Где, 12345 это пароль на запуск программы. Но этот код можно использовать, где только захотите.
Вывод сообщения
Если хотите просто выводить сообщение, для чего-нибудь, то вставьте это:
Рисование на форме
Дальше идет такая мелкая программа как мини Paint, т.е. рисование, причем на самой форме. Откройте стандартный проект, щелкните в пустом месте и вставьте следующий код:
Цвет можете менять с помощью параметра QBColor(0), т.е. вместо 0 поставьте другую цифру.
Перезагрузка компьютера
Для того чтобы перезагрузить компьютер: поместите кнопку и вставьте следующий код:
Запуск программы в единственном экземпляре
Следующий пример поможет Вам сделать так, чтобы программа запускалась только один раз, т.е. в случае повторного запуска она выдаст соответствующее сообщение. В код формы вставьте:
Выключение компьютера
Для того чтобы выключить компьютер можно использовать следующий код:
Завершение любого процесса
Для того чтобы завершить процесс можете использовать следующий код:
Где, вместо ICQlite.exe может быть любой процесс.
Сколько работает компьютер
Ниже показан пример того, как можно определить время работы компьютера. Данный способ основан на использование библиотеки kernel32, поэтому в самом начале кода формы подключите данную DLL.
Мы рассмотрели простые функции, которые можно использовать практически везде. Теперь рассмотрим более серьезные примеры, и они Вам могут очень сильно помочь написать свои крупные проекты.
Примеры работы с папками
Удалить каталог
Создать каталог
Список всех папок с под папками
На форму добавляем 2 текстовых поля и кнопку, имя первого текстового поля: StartText, имя второго текстового поля OutText. Свойство Multiline = true, имя кнопки = CmdStart
Далее пишем код в кнопке:
Теперь запускаем программу, в текстовом поле StartText пишем: C:\windows, и жмем на кнопку.
Размер каталога
Примеры работы с файлами
Копировать
Примечание! Если в каталоге 2 уже находится файл с именем 1.txt, то он будет заменен на 1.txt из каталога 1.
Можно использовать и функции API:
Удаление
Например, мы хотим удалить файл 1.txt из корня диска C:\
Перемещение
Можно, например, переместит и так:
Но лучше так (через API):
Переименование
Для того чтобы переименовать файл 1.txt находящийся в C:\ на 2.txt можно использовать следующий код:
Определить размер файла
Размер файла можно определить двумя путями:
Если файл можно открыть функцией OPEN, то можно воспользоваться функцией LOF
Или использовать функцию FileLen
Скрыть часы программно
Добавьте 2 кнопки и вставляйте код:
Добавить иконку в трей
Добавляем модуль, вставляем в него код:
Чтобы использовать вставьте в код формы:
Блокируем кнопку пуск
Добавляем 2 кнопки и вставляем код:
Считываем параметры из INI файла
Программа подключается к FTP, а в ини файле прописаны параметры — сервер, логин, порт, пароль.
С начало создаем INI файл:
Его необходимо поместите в папку с программой. Далее, вставляем в модуль:
Затем вставляем в код формы:
Список запущенных процессов
Добавляем Listbox и 1 кнопку, вставляем следующий код:
Помещение программы в автозагрузку
Для того чтобы программа загружалась вместе с Windows, как и другие некоторые программы, можно использовать реестр:
Добавьте 2 кнопки и следующий код:
А для того чтобы программа загружалась вместе с Windows, даже в безопасном режиме, то такой код:
Для начала более серьезный способ (сделайте на всякий случай резервную копию реестра).
Ну и простой способ.
Скрываем панель задач
Добавляем 2 кнопки и вставляем код:
Разархивировать архив RAR
Для того чтобы разархивировать архив RAR можно использовать следующий код:
Сколько оперативной памяти в компьютере
Добавьте одну кнопку и вставляйте следующий код:
Скрыть значки рабочего стола
Это делается следующим образом. Добавите 2 кнопки и вставляйте следующий код:
С помощью кнопки Command1 значки скрываются, Command2 — появляются.
На этом у меня все, надеюсь, вышеперечисленные примеры будут Вам полезны, пока!
Автоматизация рутины в Microsoft Excel при помощи VBA
В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.
VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.
Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.
Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.
Поэтому, увы, будем учить Visual Basic.
Чуть-чуть подготовки и постановка задачи
Итак, поехали. Открываем Excel.
Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.
Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):
То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).
Результат, которого хотим добиться, выглядит примерно так:
Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?
Кодим
Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».
И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».
Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:
Напишем Hello World:
Sub FormatPrice()
MsgBox «Hello World!»
End Sub
И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.
Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.
Примеры синтаксиса
Dim res As sTRING ‘ Регистр в VB не важен. Впрочем, редактор Вас поправит
Dim i As Integer
‘ Цикл всегда состоит из нескольких строк
For i = 1 To 10
res = res + CStr(i) ‘ Конвертация чего угодно в String
If i = 5 Then Exit For
Next i
Dim x As Double
x = Val( «1.234» ) ‘ Парсинг чисел
x = x + 10
MsgBox x
On Error GoTo Err ‘ При ошибке перейти к метке Err
x = 5 / 0
MsgBox «OK!»
GoTo ne
ne:
On Error GoTo 0 ‘ Отключаем обработку ошибок
‘ Циклы бывает, какие захотите
Do While True
Exit Do
Loop ‘While True
Do ‘Until False
Exit Do
Loop Until False
‘ А вот при вызове функций, от которых хотим получить значение, скобки нужны.
‘ Val также умеет возвращать Integer
Select Case LengthSqr(Len( «abc» ), Val( «4» ))
Case 24
MsgBox «0»
Case 25
MsgBox «1»
Case 26
MsgBox «2»
End Select
Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.
Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.
Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.
Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.
Надеюсь, что этого Вам хватит, чтобы не пугаться кода и самостоятельно написать какое-нибудь домашнее задание по информатике. По ходу поста я буду ненавязчиво знакомить Вас с новыми конструкциями.
Кодим много и под Excel
В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.
Sub FormatPrice()
Sheets( «result» ).Cells.Clear
Sheets( «data» ).Activate
End Sub
Работа с диапазонами ячеек
Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.
Примеры работы с Range
Sheets( «result» ).Activate
Dim r As Range
Set r = Range( «A1» )
r.Value = «123»
Set r = Range( «A3,A5» )
r.Font.Color = vbRed
r.Value = «456»
Set r = Range( «A6:A7» )
r.Value = «=A1+A3»
Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:
Для упрощения работы рекомендую определить следующие функции-сокращения:
Function GetCol(Col As Integer ) As String
GetCol = Chr(Asc( «A» ) + Col)
End Function
Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».
Глобальные переменные
Option Explicit ‘ про эту строчку я уже рассказывал
Dim CurRow As Integer
Const GroupsCount As Integer = 2
Const DataCount As Integer = 3
FormatPrice
Sub FormatPrice()
Dim I As Integer ‘ строка в data
CurRow = 1
Dim Groups(1 To GroupsCount) As String
Dim PrGroups(1 To GroupsCount) As String
Теперь надо заполнить массив Groups:
На месте многоточия
И создать заголовки:
На месте многоточия в предыдущем куске
For I2 = 1 To GroupsCount
If Groups(I2) <> PrGroups(I2) Then
Dim I3 As Integer
For I3 = I2 To GroupsCount
AddHeader I3, Groups(I3)
Next I3
Exit For
End If
Next I2
Не забудем про процедуру AddHeader:
Перед FormatPrice
Теперь надо перенести всякую информацию в result
Подогнать столбцы по ширине и выбрать лист result для показа результата
После цикла в конце FormatPrice
Sheets( «Result» ).Activate
Columns.AutoFit
Всё. Можно любоваться первой версией.
Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:
Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:
Поэтому чуть-чуть меняем код с добавлением стиля границ:
Select Case Ty
Case 1 ‘ Тип
.Font.Bold = True
.Font.Size = 16
.Borders(xlTop).Weight = xlThick
Case 2 ‘ Производитель
.Font.Size = 12
.Borders(xlTop).Weight = xlMedium
End Select
.Borders(xlBottom).Weight = xlMedium ‘ По убыванию: xlThick, xlMedium, xlThin, xlHairline
End With
CurRow = CurRow + 1
End Sub
Осталось лишь добится пропусков перед началом новой группы. Это легко:
В начале FormatPrice
Dim I As Integer ‘ строка в data
CurRow = 0 ‘ чтобы не было пропуска в самом начале
Dim Groups(1 To GroupsCount) As String
В цикле расстановки заголовков
If Groups(I2) <> PrGroups(I2) Then
CurRow = CurRow + 1
Dim I3 As Integer
В точности то, что и хотели.
Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.
Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.
Спасибо за внимание.
Буду рад конструктивной критике в комментариях.
UPD: Перезалил пример на Dropbox и min.us.
UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.