Remkomplekty.ru

IT Новости из мира ПК
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Msdn vba excel

VBA-Урок 1. Что такое VBA. Основные понятия.

В данном разделе мы рассмотрим что такое VBA, посколько именно на нем и пишутся макросы.

Что такое VBA?

VBA — язык (расшифровывается как Visual Basic for Application) был разработан компанией Microsoft. Данный язык не является самостоятельным, а предназначен для автоматизации процессов в пакете MS Office. VBA широко используется в Excel, а также в Access, Word и других программах пакета.

VBA — простой язык программирования, которому может научиться любой желающий. Изучив его, вы сможет предоставлять команды Excel, что делать с колонками, строками, значениями в ячейках, перемещать/добавлять/сортировать листы, выводить заранее запрограммированные сообщения, писать свои формулы и функции и т.д. Суть языка заключается в оперировании объектами (что относит его к объектно-ориентированному программированию).

Чтобы работать с VBA кодом, нам нужен редактор, который уже установлен по умолчанию. Вы можете открыть его, нажав комбинацию клавиш » ALT + F11 «.

Объекты (Objects)

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

Главный объект это Application, что соответствует самой программе Excel. Далее следует Workbooks (книга), Worksheets (лист), Range (диапазон, или отдельная ячейка). Например, чтобы обратиться к ячейке «A1» на листе нам нужно будет прописать следующий путь с учетом иерархии:

Application.Workbooks(«Архив»).Worksheets(«Аркуш1»).Range(«A1»).

Таким образом, мы научились обращаться до наименьшего объекта в Excel — ячейки.

Коллекции (Collections)

В свою очередь объекты имеют «коллекции». Коллекция — это группа объектов одинакового класса. Отдельные элеметы коллекции являются также объектами. Так, объекты Worksheets являются элементами коллекции объекта Worksheet, который содержит также и другие коллекции и объекты:

  • ChartObjects (элемент коллекции объекта ChartObject)
  • Range
  • PageSetup
  • PivotTables (элемент коллекции объекта PivotTable).

Свойства (Properties)

Каждый объект имеет свойства . Например, объект Range имеет свойство Value или Formula.

Worksheets(“Sheet1”).Range(“A1”).Value або Worksheets(“Sheet1”).Range(“A1”).Formula

В данном примере, свойство отображает значение, которое введено в ячейку или введенную формулу.

Также, через свойство Formula можно не только получить формулу, но и записать ее:

MsgBox Range(“A1”).Formula — получим сообщение с формулой в ячейке «А1«;

Range(“B12”).Formula = “=2+6*100” — вписываем формулу =2+6*100 в ячейку B12.

Методи (Methods)

Теперь давайте рассмотрим, каким образом мы можем управлять содержимым диапазона или ячейки. Для этого в VBA существуют, так-называемые методы (команды «что сделать»). При написании кода методы отделяются от объекта точкой, например:

Range(«A1»).Select или Cells(1, 1).Select

Данный метод указывает выбрать (Select) ячейку «A1».
Далее, давайте, удалим значение в данной ячейке. Для этого напишем следующий код:

Selection.ClearContents

Здесь программа «берет» то, что мы выделили (Selection) и удаляет его содержимое (ClearContents ).

VBA-Урок 1. Что такое VBA. Основные понятия.

В данном разделе мы рассмотрим что такое VBA, посколько именно на нем и пишутся макросы.

Что такое VBA?

VBA — язык (расшифровывается как Visual Basic for Application) был разработан компанией Microsoft. Данный язык не является самостоятельным, а предназначен для автоматизации процессов в пакете MS Office. VBA широко используется в Excel, а также в Access, Word и других программах пакета.

VBA — простой язык программирования, которому может научиться любой желающий. Изучив его, вы сможет предоставлять команды Excel, что делать с колонками, строками, значениями в ячейках, перемещать/добавлять/сортировать листы, выводить заранее запрограммированные сообщения, писать свои формулы и функции и т.д. Суть языка заключается в оперировании объектами (что относит его к объектно-ориентированному программированию).

Чтобы работать с VBA кодом, нам нужен редактор, который уже установлен по умолчанию. Вы можете открыть его, нажав комбинацию клавиш » ALT + F11 «.

Объекты (Objects)

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

Главный объект это Application, что соответствует самой программе Excel. Далее следует Workbooks (книга), Worksheets (лист), Range (диапазон, или отдельная ячейка). Например, чтобы обратиться к ячейке «A1» на листе нам нужно будет прописать следующий путь с учетом иерархии:

Application.Workbooks(«Архив»).Worksheets(«Аркуш1»).Range(«A1»).

Таким образом, мы научились обращаться до наименьшего объекта в Excel — ячейки.

Коллекции (Collections)

В свою очередь объекты имеют «коллекции». Коллекция — это группа объектов одинакового класса. Отдельные элеметы коллекции являются также объектами. Так, объекты Worksheets являются элементами коллекции объекта Worksheet, который содержит также и другие коллекции и объекты:

  • ChartObjects (элемент коллекции объекта ChartObject)
  • Range
  • PageSetup
  • PivotTables (элемент коллекции объекта PivotTable).

Свойства (Properties)

Каждый объект имеет свойства . Например, объект Range имеет свойство Value или Formula.

Worksheets(“Sheet1”).Range(“A1”).Value або Worksheets(“Sheet1”).Range(“A1”).Formula

В данном примере, свойство отображает значение, которое введено в ячейку или введенную формулу.

Также, через свойство Formula можно не только получить формулу, но и записать ее:

MsgBox Range(“A1”).Formula — получим сообщение с формулой в ячейке «А1«;

Range(“B12”).Formula = “=2+6*100” — вписываем формулу =2+6*100 в ячейку B12.

Методи (Methods)

Теперь давайте рассмотрим, каким образом мы можем управлять содержимым диапазона или ячейки. Для этого в VBA существуют, так-называемые методы (команды «что сделать»). При написании кода методы отделяются от объекта точкой, например:

Range(«A1»).Select или Cells(1, 1).Select

Данный метод указывает выбрать (Select) ячейку «A1».
Далее, давайте, удалим значение в данной ячейке. Для этого напишем следующий код:

Selection.ClearContents

Здесь программа «берет» то, что мы выделили (Selection) и удаляет его содержимое (ClearContents ).

Создание COM библиотеки для VBA(Excel)

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

Так же действовал по этому методу, ошибка та же самая.

Судя по посту на geeksengine, VS должен зарегистрировать библу, если установлен параметр «Регистрация для COM взаимодействия», но при попытке зарегистрировать через regsvr32 получаю «Модуль загружен, но точка входа DllRegisterServer не найдена».
Что конкретно я делаю не так?
Есть ли возможность загрузить библиотеку более простым способом, т.к. библа планируется ставиться на несколько компьютеров?

Создание макроса для Word со ссылками на элементы библиотеки переводов в Excel
Всем привет!. начал много и плотно работать с техническими документами на двух языках. Вспомнил.

Создание файла Excel. Библиотеки
Здравствуйте. Работаю над консольным приложение, хочу реализовать создание листа Excel (или.

Какие Excel библиотеки необходимы для создания CreateObject(‘Excel.Application’) ?
проблема в том что клиент не хочет пользоваться MS Excel. существуют ли возможность работы с Open.

Создание папок VBA Excel
Добрый день!Пожалуйста помогите с VBA Exсel 1.При начале нового дня создать новую папку с именем.

Является обязательным для COM объекта

Попробуйте переписать в точности пример по ссылке и, не трогая библиотеку с папки компиляции, подрубиться к ней (.tlb)
При компиляции не забудьте галочку поставить в разделе «компиляция» «регистрация для COM-взаимодействия»

Вроде разобрался, необходимо было зарегистрировать через RegAsm, независимо от того, стоит ли галочка «Регистрация для COM взаимодействия».
До этой темы моя ошибка была в том, что я пытался скормить путь к dll’ке regasm’у из папки проекта без кавычек и не заметил этого.
И конечно же нужно использовать RegAsm из C:WindowsMicrosoft.NETFramework64 для х64 системы, иначе будет та же ошибка в excel, проверял для AnyCPU.

Столкнулся с той же ошибкой 429 на строке

Раз 10 перечитал/перепробовал все, включая ссылки, — ничего не помогает.

Причем, если после компиляции dll в VS зарегистрировать ее еще и через RegAsm:
C:WindowsMicrosoft.NETFramework64v4.0.30319RegAsm.exe «E:ДокументыVisual Studio 2017Projects VBClassTestClassTestbinReleaseClassTest.dll»,
тогда Excel выдает: «не удается найти указанный файл», (см.скрин),
хотя, при написании кода, VBE показывает даже параметры функции в подсказке,
т.е. библиотека подключена и видна.
Если не регистрировать при компиляции, а только через RegAsm с созданием tlb, — тоже самое.

Куда еще копать?

Win7 (64), Excel 2016 (64), VS 2017 (AnyCPU)

Была мысль в эту сторону , но собственных нейронов не хватило довести до ума.
(Новичок еще в VB.NET, больше в VBA сидел.)

Если тот же AnyCPU-DLL зарегистрировать 32-битным «регазмом», тогда проблем с «поиском файла» нет.
Но все-равно появляется ошибка 429.
А если в VS заменить AnyCPU на x64, (для моего Excel), то и без RegAsm сразу все взлетело!

(Правда непонятно, как же человек смог запустить AnyCPU на 64?
описание выше: https://www.cyberforum.ru/post11234282.html
если я его правильно понял. )

И теперь новый подвох!
Если отключить регистрацию в VS и делать ее только через RegAsm, — снова ошибка с поиском файла.

Сравнительный анализ реестра показал, что VS, при регистрации DLL, добавляет в реестр 4 строки с путем к файлу:

(или добавка 2-х строк, а реестр сам добавляет еще 2 — тут плохо понимаю. )

В тоже время, если в RegAsm добавить ключ /codebase, то как и сказано в документации,
если DLL не является «сборкой со строгим именем», — работать не будет. 🙁

Можно, конечно, еще «нарисовать топор» с «ручным» прописыванием в реестр этих строк с путем. для регистрации DLL на стороннем компе.
Но, по идее, должно же быть как-то проще без этих танцев с бубном?
В общем, я что-то плохо понимаю в этом зоопарке.

К сожалению толковой инфы в инете не нашел — что это, что дает и как проверить ее наличие?
У меня сборка офиса, которая не дает выбора отдельных компонентов для каждого приложения.

Добавлено через 1 час 47 минут
Step_UA, и еще, исходя из вопроса, тогда на стороннем компе «поддержка программирования .net» тоже должна присутствовать.

Step_UA, на это я уже писал:

а потому был и ряд встречных вопросов.

В частности, если бы я писал библу только для себя, тогда мне этот компонент выходит и не нужен,
т.к. достаточно скомпилить DLL в х64, и «на лету» зарегистрировать ее VS-ом — все работает.

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

Тогда проще программно залезть к юзеру в реестр с «топором», как я уже писал выше, и добавить туда недостающие строчки.
Тем более что авто-регистрацию DLL по любому еще придется прикручивать.
Только вот хотелось бы как-то более цивилизованно это сделать.

Msdn vba excel

������� ���������� ��������� �� ����� VBA – �������, ����� �������� �� ���������� ������, � ����������� �� ��������� ����������. ���� ���������� �������� ���������, ������� ����� ����������� ������������ ���������� ��� ��������, ����������� �������������� ����������� ������������ ���������� Microsoft Office, �� ���������� ������� ����������� ������. ��� ���������� ���� ��������� ����� ��������� � ������� ������� ���������� ������, ������� ������� ����� �������� ���������� ���������. ��� ����� � ���������� ���������� �������� ������ ������������ � ������� ������� ��� ������ ������������ �������� ����������, � ����� ������� ������ � ��������������� ����������� �����. ���� ��������� ��������� � ������� ������� ������ ������ �������.

���������� “�����������” ��������� (��� ���������� ������� ��������� ��������� ����, � ���������� ���������� ����������) ����� �������� ��� �����. ������ ���� – ���� ����������� ����������������, �� ������� ��������� ���� (�����) ���������, ��� ������������� ����������� �������� ����������. ������ – ���� ����������������, �� ������� ��������� ����� ��������� (���������), ������������� � ����� �� ������������ �������. �������� ��������, ��������, ������ ����� ������� ���� �� ��������� ������ (������� Click), ������� ������� �� ���������� (������� KeyPress) � �.�. ������������ ����� ���������� ����� �������� ������ – «������ �������».

Range(“�����”)

Cells(i, j)

Rows(� ������)

Columns(� �������)

Sheets(“���”)

Sheets(� �����)

WorkSheet

Range(“A5:A10”). Value = 0 ��� Range(“A5:A10”) = 0 – � �������� ����� A5:A10 ��������� �������� 0.

Cells(2, 4). Value = n ��� Cells(2, 4) = n – � ������, ����������� �� ����������� 2-� ������ � 4-�� ������� (������ � ������� “D2”), ��������� �������� ���������� n.

Xn = Cells(1, 2).Value ��� Xn = Range(“B1”).Value – ���������� Xn ������������� �������� �� ������ B1 �������� �������� �����.

Sheets(2).Activate ������� �������� ���� � �2.

Sheets(“���������”).Delete ������� ���� � ������ “���������”.

Range(«A5:A10»).Clear – �������� �������� ����� A5:A10.

Range(«A2:B10»).Select – �������� �������� ����� A2:B10.

Application.Quit — ���������� ������ � Excel.

Полезности для VBA программиста

Если вы произносите слово «макрОсы» с придыханием от ужаса и ударением на втором слоге, а фраза «Visual Basic for Applications» для вас звучит как заклинание, то эта статья — не для вас. Во всяком случае — пока 🙂

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

MZ-Tools — «швейцарский нож» для программиста

После установки в редакторе VBE в меню Tools появится подменю MZ-Tools и новая панель инструментов для быстрого вызова тех же функций:

Умеет очень и очень много. Из самого ценного, на мой взгляд:

  • Автоматически добавлять «рыбы-заготовки» для создания процедур, функций, обработчиков событий и ошибок с правильным наименованием переменных по венгерской системе.
  • Копировать элементы управления на пользовательских формах вместе с их кодом.
  • Делать закладки (Favorites) на процедуры и быстро к ним переходить в большом проекте.
  • Разбивать длинные строки кода на несколько и собирать обратно (split и combine lines).
  • Выдавать подробную статистику по проекту (кол-во строк кода, процедур, элементов на формах и т.д.)
  • Проверять проект на наличие неиспользуемых переменных и процедур (Review Source)
  • Создать свою базу заготовок кода (Code Templates) для типичных случаев и быстро вставлять их потом в новые макросы.
  • Автоматически создавать длинную и страшную строку для подключения к внешним источникам данных по ADO.
  • Вешать горячие клавиши на любую функцию из надстройки.

Однозначный мастхэв для программиста любого уровня. Если у вас последняя версия Office, то скачивайте обязательно свежую версию MZ-Tools 3.00.1218 от 1 марта, т.к. в ней исправлен баг, при работе с Excel 2013.

Smart Indenter — автоматическая расстановка отступов в коде

Хорошо делает одну простую, но очень нужную операцию — автоматически расставляет отступы табуляции в коде VBA, наглядно выделяя вложенные циклы, проверки условий и т.д.

Очень удобно повесить это действие на любое удобное сочетание клавиш в разделе Indenting Options и делать в одно касание.

К сожалению, автор программы забросил ее в 2005 году (почему, Карл!?) и последняя версия на сайте предназначена для Excel 97-2003. Тем не менее, программа вполне успешно работает и с более новыми версиями. Единственный нюанс: если у вас Excel 2013, то перед установкой Smart Indenter нужно установить сначала MZ-Tools последней версии, т.к. она содержит нужную для работы Indenter’а динамическую библиотеку.

VBE Tools — микроподстройка элементов в формах

Выравнивание элементов управления (кнопок, полей ввода, текстовых надписей и т.д.) на сложной форме может быть весьма мучительным процессом. Стандартная привязка к сетке редактора через меню Tools — Options — General — Align Controls to Grid иногда не очень помогает и даже начинает мешать, особенно если нужно сдвинуть, например, кнопку совсем на чуть-чуть. В этом деле поможет надстройка VBE Tools, которая после установки отобразить простую панельку, где можно для выбранного элемента произвести микроподстройку размеров и положения на форме:

Сдвиг положения также можно будет делать с помощью сочетаний клавиш Alt+стрелки, а изменение размеров с помощью Shift+Alt+стрелки и Ctrl+Alt+стрелки.

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

VBA Diff — поиск отличий в коде

Этот инструмент пригодится, пожалуй, больше профессиональным программистам на VBA при создании больших и сложных проектов или совместной разработке. Его основная функция — сравнивать два проекта и наглядно отображать разницу в коде между ними:

Есть 30-дневный бесплатный период, а потом надстройка попросит заплатить за нее 39 фунтов (около 3.5 тыс.руб по текущему курсу).

Говоря откровенно, мне она пригодилась в этой жизни всего раза 3-4 на супербольших проектах, но сэкономила мне тогда несколько дней и много-много нервных клеток 🙂 Ну и всегда есть, конечно, бесплатная альтернатива: экспортировать код в текстовый файл (правой кнопкой мыши по модулю — Export) и сравнивать их потом в Microsoft Word с помощью команды Рецензирование — Сравнить документы, но с помощью VBA Diff это на порядок удобнее.

Moqups и Wireframe Sketcher — прототипирование интерфейса

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

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

Это онлайновый редактор, который:

  • Не требует установки отдельных программ. Всегда можно приехать к клиенту в офис и прямо на сайте открыть-показать-подправить созданный интерфейс.
  • Содержит все основные элементы диалоговых окон (надписи, кнопки, вып.списки и т.д.) в вариантах для Windows и Mac.
  • Позволяет экспортировать созданный интерфейс в PNG или PDF форматах или отправить клиенту ссылочку для просмотра онлайн.
  • Фактически бесплатен. Есть ограничения на количество графических элементов, но мне еще ни разу не удалось за них выйти. Если не будет хватать места или захочется хранить сразу несколько больших проектов, то всегда можно перейти на премиум-версию за 99$ в год.

В общем и целом, для задач разработчика на VBA — более, чем достаточно, я считаю.

Если для кого принципиально нужен офлайновый вариант (для работы без доступа к интернету на берегу моря, например), то рекомендую Wireframe Sketcher:

После бесплатного демо-периода на 2 недели попросит купить за те же 99$.

Invisible Basic — обфускатор кода

Надежно закрыть исходный код ваших макросов паролем в Microsoft Excel, к сожалению, невозможно. Однако, существует целый класс программ, называемых обфускаторами (от англ. obfuscate — сбивать с толку, запутывать), которые так меняют внешний вид VBA-кода, что прочитать и понять его будет крайне сложно, а именно:

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

Откровенно говоря, я не фанат использования подобных методов. В частности, с PLEX я решил, что лучше буду отдавать покупателям полной версии открытый, понятный и прокомментированный исходный код — это мне кажется более правильным. Тем не менее, у моих знакомых программистов неоднократно были случаи, когда подобная программка очень пригодилась бы (программист выполнил работу, а клиент не заплатил и т.д.) Так что если понадобится — знайте, где взять. «Мы мирные люди, но наш бронепоезд. » и все такое.

Code Cleaner — очистка кода

В процессе работы над проектом (особенно, если он большой и долгий) в модулях кода и формах начинает накапливаться «мусор» — обрывки служебной информации редактора VBE, которые могут привести к неожиданным и нежелательным глюкам. Утилита Code Cleaner чистит эту гадость простым, но надежным способом: экспортирует код из модулей в текстовые файлы, а потом импортирует его чистеньким обратно. Очень рекомендую при работе над большими проектами периодически проводить такую «уборку».

Ribbon XML Editor

Если для запуска ваших макросов хочется создать на ленте Excel собственную вкладку с красивыми кнопками, то вам не обойтись без редактора XML-файлов интерфейса. Однозначно, самым удобным и мощным на сегодняшний день является в этом плане отечественная программа Ribbon XML Editor, созданная Максимом Новиковым.

Совершенно замечательный софт, который:

  • позволит легко добавлять на ленту собственные вкладки, кнопки, выпадающие списки и другие элементы нового интерфейса Office
  • полностью поддерживает русский язык
  • помогает при редактировании, отображая контекстные подсказки
  • можно легко освоить по урокам
  • полностью бесплатен

Долгие годы Microsoft упорно в лоб игнорирует разработчиков на VBA, считая его, судя по всему, неполноценным языком программирования. Периодически проскальзывают слухи, что в следующей версии Office Visual Basic уже не будет или его заменят на JavaScript. Регулярно выходят новые версии Visual Studio с новыми плюшками, а редактор VBE так и застрял в 1997 году, до сих пор не умея стандартными средствами расставить отступы в коде.

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

Все вышеперечисленные программы — это сугубо мой личный выбор и персональная рекомендация на основе личного опыта. Никто из авторов не просил меня о рекламе и не платил за нее (а я бы и не взял, из принципа). Если у вас есть что добавить к приведенному списку — добро пожаловать в комментарии, благодарное человечество в долгу не останется.

Читать еще:  Сервис в excel
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×