SQL запросы средствами VBA в СУБД Access 2003 и 2007
В данной статье рассмотрим формирования запросов с использованием SQL в VBA для базы данных Microsoft Access 2003, 2007.
Известно, что SQL запросы в VBA могут быть сформированы с применением следующих технологий доступа к данным: DAO, RDO, ODBC, ADO.NET, ADO, OLE DB и др. Технологии ADO (ActiveX Data Objects) и OLE DB (Object Linking and Embedding, Database) пришли на смену DAO/RDO и ODBC (Open Database Connectivity) соответственно.
Так как мы рассматриваем локальную Microsoft Access 2003, 2007, то применим технологию DAO для реализации SQL запросов в VBA. Следует отметить, что DAO (Data Access Objects) – это объектно-ориентированный интерфейс (API) доступа к данным локальных БД типа Access.
В качестве объектных переменных используем конкретный тип объекта из объектной модели «Database» и новый создаваемый объект «QueryDef». Поскольку используются объектные переменные, то их надо не только объявить в программе VBA, но и присвоить (установить) им определенные значения.
Топ 10 плагинов для Vs Code (для начинающих)
Назначим им соответствующий объект с помощью специального оператора Set. Так как мы будем работать с объектами открытой БД Access, то объектной переменной Database присваиваем ссылку на текущую базу данных CurrentDb. Для создания объекта «QueryDef» (создания нового запроса) используем метод CreateQueryDef.
Для формирования запроса «Запр_гр» с использованием SQL в VBA запустим БД «sql_training_st1_cross-tab.mdb» и создадим новый объект: модуль.
В окне Code введем следующую процедуру:
Private Sub Запр_Гр ()
Dim oMyDb As Database
Dim oMyQuery As QueryDef
Set oMyDb = CurrentDb
Set oMyQuery = oMyDb.CreateQueryDef(«Запр_гр», «SELECT * FROM Группы;»)
End Sub
Скриншот кода программы модуля Module_Request представлен на рис. 1.
Рис. 1. SQL запрос Module_Request средствами VBA в СУБД Access
Для запуска программы надо щелкнуть на пиктограмме «Run Sub», затем на команде «Сохранить». После этого в окне БД в «Области переходов» в категории «Запросы» появится новый объект — запрос «Запр_гр», а в категории «Модули» — объект: «Module_Request». После создания запроса на выборку необходимо выполнить этот запрос, дважды щелкнув на объекте «Запр_гр» в «Области переходов». Результаты выполнения команды представлены на рис. 2.
Рис. 2. Отображение SQL запрос Module_Request средствами VBA в СУБД Access
Таким образом, созданный запрос «Запр_гр» на выборку с использованием SQL в VBA для базы данных Microsoft Access 2003, 2007 будет постоянно отображаться в «Области переходов».
Источник: www.lessons-tva.info
Полезности для VBA программиста
Если вы произносите слово «макрОсы» с придыханием от ужаса и ударением на втором слоге, а фраза «Visual Basic for Applications» для вас звучит как заклинание, то эта статья — не для вас. Во всяком случае — пока 🙂 Если же у вас за плечами есть хоть какой-то опыт программирования макросов на VBA в Excel, и вы не планируете останавливаться, то приведенная ниже подборка полезных надстроек и программ должна вам (хотя бы частично) пригодиться.
Visual Basic (VBA) или Python — какой язык выбрать для автоматизации Excel в 2023 г.?
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
- полностью поддерживает русский язык
- помогает при редактировании, отображая контекстные подсказки
- можно легко освоить по урокам
- полностью бесплатен
P.S.
Долгие годы Microsoft упорно в лоб игнорирует разработчиков на VBA, считая его, судя по всему, неполноценным языком программирования. Периодически проскальзывают слухи, что в следующей версии Office Visual Basic уже не будет или его заменят на JavaScript. Регулярно выходят новые версии Visual Studio с новыми плюшками, а редактор VBE так и застрял в 1997 году, до сих пор не умея стандартными средствами расставить отступы в коде.
В реальности же, тысячи людей экономят часы и дни, благодаря программистам на VBA, создающим макросы для автоматизации повседневных рутинных задач офисной обработки данных. Кто видел, как макрос в 10 строк кода делает за полминуты рассылку файлов по 200 клиентам, заменяя три часа тупой работы — тот меня поймет 🙂
Все вышеперечисленные программы — это сугубо мой личный выбор и персональная рекомендация на основе личного опыта. Никто из авторов не просил меня о рекламе и не платил за нее (а я бы и не взял, из принципа). Если у вас есть что добавить к приведенному списку — добро пожаловать в комментарии, благодарное человечество в долгу не останется.
Источник: www.planetaexcel.ru
Основы программирования на VBA. Полезные программы для Excel и 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 «Строка » » не найдена» Else MsgBox «Строка » » найдена в ячейке A» Процедура 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 0 Then Cells(1, 1).Value = 1
If x=0 Then Cells(1, 1).Value = 0
Источник: qzoreteam.ru