Помощь access excel vba

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

В этой статье

  • Программирование

  • Выбор в пользу макросов или кода VBA

  • Выполнение распространенных задач программирования с помощью мастера кнопок

  • Макросы

  • Код VBA

  • Преобразование макросов в код VBA

Программирование

Программирование в Access — это процесс добавления функций в базу данных с помощью макроса Access или кода VBA Visual Basic для приложений (VBA). Предположим, например, что вы создали форму и отчет и хотите добавить в форму кнопку, при нажатии на которую открывается отчет. В данном случае программированием является создание макроса или процедуры VBA с настройкой свойства события OnClick для запуска макроса или процедуры нажатием кнопки. Для простой операции, например открытия отчета, можно воспользоваться мастером кнопок для работы или отключить мастер и программировать его самостоятельно.

Примечание: Во многих программах Microsoft Office термин «макрос» относится к коду VBA. Это может запутать пользователей Access, так как в этом приложении термин «макрос» относится к именованному набору макрокоманд, для создания которого используется конструктор макросов. Макрокоманды Access — это лишь часть команд, доступных в VBA. Конструктор макросов обладает более структурированным интерфейсом, чем редактор Visual Basic, что позволяет добавлять программный код к элементам управления и объектам без необходимости изучать код VBA. Следует помнить, что в статьях справки Access макросы Access называются просто макросами. С другой стороны, код VBA может называться VBA, кодом, функцией или процедурой. Код VBA содержится в модулях классов (это части отдельных форм и отчетов, обычно содержащие код только для этих объектов), а также в модулях (они не привязаны к определенным объектам и обычно содержат «глобальный» код, который можно использовать во всей базе данных).

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

К началу страницы

Выбор в пользу макросов или кода VBA

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

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

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

Рекомендации по использованию макросов

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

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

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

  • Назначение действия или набора действий ключу. Для этого необходимо создать группу макросов с именем AutoKeys.

  • Выполнение действия или последовательности действий при первом открытии базы данных. Для этого необходимо создать макрос с именем AutoExec.

    Примечание:  Макрос AutoExec запускается раньше, чем любой другой макрос или код VBA, даже если вы назначили в диалоговом окне Параметры Access начальную форму и прикрепили к ее событию OnOpen или OnLoad макрос или код VBA.

Дополнительные сведения о создании макросов см. в разделе Макросы.

Рекомендации по использованию VBA

Программный код VBA следует использовать вместо макросов, если вы хотите сделать следующее:

  • Использовать встроенные функции или создать собственные.    В Access есть множество встроенных функций, например IPmt, которая вычисляет процентные платежи. С помощью этих встроенных функций можно выполнять вычисления, не создавая сложных выражений. Используя код VBA, вы также можете создать собственные функции для выполнения вычислений, которые требуют создания слишком сложных выражений или не могут быть выполнены с их помощью. Кроме того, созданные функции можно включать в выражения, что позволяет выполнять часто используемые операции с разными объектами.

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

  • Выполнять действия на уровне системы.    Чтобы запустить из Access другую программу (например, Microsoft Excel), можно выполнить макрос с макрокомандой RunApp, но в целом возможности применения макросов для выполнения действий вне Access ограничены. С помощью VBA можно проверить, существует ли на компьютере определенный файл, воспользоваться технологией Automation или DDE для взаимодействия с другими программами для Microsoft Windows, такими как Excel, и вызвать функции из библиотек DLL в Windows.

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

К началу страницы

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

Добавьте в форму кнопку, и мастер кнопок поможет вам приступить к программированию. С помощью мастера вы сможете создать кнопку для выполнения определенной задачи. В файле Access (ACCDB) мастер создает макрос, внедренный в свойство OnClick этой кнопки. В MDB- или ADP-файле мастер создает код VBA, так как в этих форматах не поддерживаются внедренные макросы. В любом случае вы можете затем изменить или дополнить макрос или код VBA в соответствии со своими потребностями.

  1. В области навигации щелкните правой кнопкой мыши форму, в которую нужно добавить кнопку, и выберите пункт Конструктор.

  2. На вкладке Конструктор щелкните стрелку вниз, чтобы открыть коллекцию Элементы управления, и убедитесь в том, что пункт Использовать мастера выделен.

  3. На вкладке Конструктор в коллекции Элементы управления щелкните элемент Кнопка.

  4. На бланке формы щелкните там, где нужно поместить кнопку.

    Откроется мастер кнопок.

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

  6. Выберите параметр Текст или Рисунок в зависимости от того, что нужно отобразить на кнопке.

    • Если вы хотите отобразить текст, то можете изменить содержимое поля рядом с параметром Текст.

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

      Нажмите кнопку Далее.

  7. Введите понятное имя для кнопки. Это необязательный шаг, и это имя не отображается на кнопке. Тем не менее рекомендуем указать понятное имя, чтобы было легко отличить эту кнопку от других позже (например, при настройке последовательности табуляции для элементов управления формы). Например, если кнопка закрывает форму, можно назвать ее cmdClose или CommandClose.

  8. Нажмите кнопку Готово.

    Кнопка будет размещена в форме.

  9. Если вы хотите просмотреть программный код, созданный мастером, можно сделать следующее:

    1. Если окно свойств не отображается, нажмите клавишу F4.

    2. В окне свойств откройте вкладку События.

    3. В окне свойства «По щелчку» нажмите кнопку «Построить» Изображение кнопки.

      Откроется конструктор макросов, в котором будет показан макрос, созданный мастером. При желании макрос можно изменить (дополнительные сведения о редактировании макросов см. в разделе Макросы). Когда вы закончите, на вкладке Конструктор в группе Закрыть нажмите Закрыть, чтобы закрыть конструктор макросов. Если будет предложено сохранить изменения и обновить свойство, нажмите Да, чтобы сделать это, или Нет, чтобы отказаться.

  10. На вкладке Конструктор в группе Режимы нажмите кнопку Режим и выберите пункт Режим формы. Нажмите новую кнопку, чтобы проверить, правильно ли она работает.

К началу страницы

Макросы

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

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

Создать макрос можно с помощью конструктора макросов, который показан на этом рисунке:

Конструктор макросов Access 2010

Вот как можно открыть конструктор макросов:

  • на вкладке Создание в группе Макросы и код нажмите кнопку Макрос.

К началу страницы

Код VBA

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

Самый быстрый способ приступить к написанию программного кода VBA — создать макрос Access, а затем преобразовать его в код VBA. Инструкции см. в разделе Преобразование макросов в код VBA. В этом случае будет создан модуль VBA, который выполняет те же операции, которые определены в макросе. Кроме того, откроется редактор Visual Basic, так что вы сможете приступить к редактированию процедуры. При работе в редакторе Visual Basic можно щелкнуть интересующее вас ключевое слово и нажать клавишу F1, чтобы открыть справку разработчика Access и ознакомиться с соответствующей статьей. Затем вы можете продолжить изучение справки разработчика Access и узнать о новых командах, которые пригодятся для ваших задач.

К началу страницы

Преобразование макросов в код VBA

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

Примечание: Веб-базы данных поддерживают код Visual Basic для приложений (VBA), но его невозможно запустить, когда такая база данных работает в браузере. Чтобы выполнить код VBA, который содержится в веб-базе данных, ее необходимо открыть в Access. Для задач, связанных с программированием, в веб-базах данных следует использовать макросы Access.

Преобразование макросов, прикрепленных к форме или отчету

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

  1. В области навигации щелкните форму или отчет правой кнопкой мыши и выберите пункт Конструктор.

  2. На вкладке Конструктор в группе Сервис нажмите Преобразовать макросы формы или Преобразовать макросы отчета.

  3. В диалоговом окне Преобразование макросов формы или Преобразование макросов отчета укажите, нужно ли добавить к создаваемым функциям код обработки ошибок. Кроме того, если в макросах есть комментарии, укажите, нужно ли добавлять их в функции. Нажмите кнопку Преобразовать.

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

  4. Чтобы просмотреть и изменить код VBA, сделайте следующее:

    1. Форма или отчет должны быть по-прежнему открыты в режиме конструктора. Если окно свойств не отображается, нажмите клавишу F4.

    2. На вкладке «События» окна свойств щелкните любое поле свойства, в которое будет отображаться [Процедура мероприятия],и нажмите кнопку сборки Изображение кнопки. Чтобы просмотреть свойства событий для определенного элемента управления, щелкните его, чтобы выбрать. Чтобы просмотреть свойства событий для всей формы или отчета, в верхней части окна свойств выберите в раскрывающемся списке пункт Форма или Отчет.

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

Преобразование глобальных макросов

  1. В области навигации щелкните правой кнопкой мыши макрос, который нужно преобразовать, и выберите пункт Конструктор.

  2. На вкладке Конструктор в группе Сервис щелкните Преобразовать макросы.

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

    Макрос будет преобразован, и откроется редактор Visual Basic.

  4. Чтобы просмотреть и изменить код VBA, сделайте следующее:

    1. В редакторе Visual Basic, если область Project Explorer (Окно проекта) не отображается, в меню View (Вид) выберите пункт Project Explorer.

    2. Разверните дерево под именем базы данных, в которой вы работаете.

    3. В разделе Модули дважды щелкните модуль Преобразованный макрос — <имя макроса>.

      Модуль откроется в редакторе Visual Basic.

Прикрепление функции VBA к свойству события

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

  1. В редакторе Visual Basic посмотрите, как называется функция. Например, если преобразовать макрос с именем MyMacro, функции будет присвоено имя MyMacro().

  2. Закройте редактор Visual Basic.

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

  4. Щелкните элемент управления или раздел, с которым вы хотите связать функцию.

  5. Если окно свойств не отображается, нажмите клавишу F4.

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

  7. В поле свойства введите знак равенства (=), а затем — имя функции (например, =MyMacro(). Не забудьте ввести скобки.

  8. Сохраните форму или отчет, нажав на панели быстрого доступа кнопку Сохранить.

  9. В области навигации дважды щелкните форму или отчет и проверьте, правильно ли работает код.

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

К началу страницы

Учимся работать с базами данных Access из макросов Excel

Кратко о структуре базы данных. База состоит из таблиц. Таблица — из строк. Строка — из полей. В полях могут храниться данные разных форматов. Форматы определяются в момент создания таблицы. Создать базу и таблицы в ней можно в Access, а можно и средствами макроса прямо из Excel.

Чтобы Access смог обращаться к базам Access, нужно подключить библиотеку DAO. Для этого в редакторе Visual Basic выбираем меню «Tools->References», открывается окошко, в котором нужно поставить галочку напротив Microsoft DAO 3.6 Object Library.

Теперь делаем так:

‘Объявляем переменные
Dim dbs As DAO.Database ‘База данных
Dim rs As DAO.Recordset ‘Запрос к базе данных

‘Открываем базу
Set dbs = DAO.OpenDatabase(«c:database.mdb»)
‘Выполняем запрос к базе данных
Set rs = dbs.OpenRecordset(«SELECT * FROM тбл_тов WHERE ID_тов>2»)


Тут объясню подробнее. Запросы к базе выполняются на языке SQL. Пока рассмотрим только одну команду этого языка — SELECT. Эта команда выбирает из таблицы строки, удовлетворяющие заданному условию. Там, где у нас стоит звездочка, можно указать названия полей, которые будут присутствовать в ответе. В нашем случае будет возвращаться вся строка полностью. После слова FROM идет название таблицы, из которой идет выбор строк. Таблиц в базе может быть много. В нашем случае это тбл_тов — таблица товаров. После слова WHERE указывается условие, по которому отбираются строки. У нас условие такое: если поле ID_тов > 2, то строка включается в ответ. Ответ получается в переменной rs, которая имеет тип Recordset. Recordset — это временная таблица, сформированная из строк, удовлетворяющих условию запроса.

‘Если ничего не найдено — выдаем сообщение и выходим

If RS.RecordCount = 0 Then

    MsgBox («По вашему запросу ничего не найдено»)

    Exit Sub

End If

Do While Not RS.EOF    ‘цикл выполняется пока не достигнута последняя строка в таблице ответа

    ‘Присваиваем ячейкам таблицы значения из базы

    Cells(i, 2).Value = RS.Fields(«назв_тов»)

    Cells(i, 1).Value = RS.Fields(«ID_тов»)

    i = i + 1

    ‘переходим к следующей строке во временной таблице ответа

    RS.MoveNext

Loop

‘Закрываем временную таблицу

RS.Close

‘Очищаем память. Если этого не сделать, то таблица так и останется в памяти до закрытия рабочей книги.

Set RS = Nothing

‘Закрываем базу

dbs.Close

‘Очищаем память

Set dbs = Nothing

Chris_Fehn

1 / 1 / 0

Регистрация: 21.05.2018

Сообщений: 6

1

Excel

22.05.2018, 00:14. Показов 9696. Ответов 5

Метки access, excel, vba (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день!

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Добавить_в_Базу()
 
Dim dbe As Object 'DAO.DBEngine
Dim db  As Object 'DAO.Database
Dim rst As Object 'DAO.Recordset
        
Set dbe = CreateObject("DAO.DBEngine.120")
Set db = dbe.OpenDatabase(ThisWorkbook.Path & "БД.accdb")
Set rs = db.TableDefs("БД_Первичные_расчеты").OpenRecordset
        
rs.AddNew
    rs("ДатаРасчета").Value = Date
    rs("ФИО").Value = Worksheets("РАСЧЕТ").Cells(3, 2)
    rs("НомерДоговора").Value = Worksheets("РАСЧЕТ").Cells(3, 4)
rs.Update
 
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
        
End Sub

Код открывает базу данных, находит нужную таблицу и вставляет данные с листа Excel в соответствующие поля в Access.

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

Подскажите, пожалуйста, как это сделать?



0



mobile

Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

22.05.2018, 07:01

2

Лучший ответ Сообщение было отмечено Chris_Fehn как решение

Решение

Цитата
Сообщение от Chris_Fehn
Посмотреть сообщение

нужно найти какую-то запись с определенным значением в поле «ФИО» и внести изменения в найденную строчку (например, изменить номер договора).

Вами уже создан рекордсет. Достаточно в нем же найти нужную запись и изменить ее. Код должен быть выполнен до команды закрытия рекорсета. Типа такого:

Visual Basic
1
2
3
4
5
6
rs.FindFirst "ФИО = '" & Worksheets("РАСЧЕТ").Cells(3, 2) & "'" 'Найти ФИО заданное в ячейке 
If not rs.Nomatch then                        'Если ФИО найдено в таблице
    rs.Edit                                   'Режим редактирования
    rs!ФИО = Worksheets("РАСЧЕТ").Cells(3, 2) 'Присвоить новое значение
    rs.Update                                 'Сохранить в таблице Access
End If



2



Chris_Fehn

1 / 1 / 0

Регистрация: 21.05.2018

Сообщений: 6

22.05.2018, 18:02

 [ТС]

3

Цитата
Сообщение от mobile
Посмотреть сообщение

Вами уже создан рекордсет. Достаточно в нем же найти нужную запись и изменить ее. Код должен быть выполнен до команды закрытия рекорсета. Типа такого:

Visual Basic
1
2
3
4
5
6
rs.FindFirst "ФИО = '" & Worksheets("РАСЧЕТ").Cells(3, 2) & "'" 'Найти ФИО заданное в ячейке 
If not rs.Nomatch then                        'Если ФИО найдено в таблице
    rs.Edit                                   'Режим редактирования
    rs!ФИО = Worksheets("РАСЧЕТ").Cells(3, 2) 'Присвоить новое значение
    rs.Update                                 'Сохранить в таблице Access
End If

На первой же строчке вашего кода выдает ошибку (скрин в приложении)

Миниатюры

Работа с БД Access через VBA Excel
 



0



mobile

Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

22.05.2018, 20:20

4

Цитата
Сообщение от Chris_Fehn
Посмотреть сообщение

выдает ошибку

Виноват, не посмотрел как создается рекордсет. Замените строку

Visual Basic
1
Set rs = db.TableDefs("БД_Первичные_расчеты").OpenRecordset

на

Visual Basic
1
Set rs = db.OpenRecordset("select * from БД_Первичные_расчеты")



2



Chris_Fehn

1 / 1 / 0

Регистрация: 21.05.2018

Сообщений: 6

23.05.2018, 17:59

 [ТС]

5

Цитата
Сообщение от mobile
Посмотреть сообщение

Виноват, не посмотрел как создается рекордсет. Замените строку

Visual Basic
1
Set rs = db.TableDefs("БД_Первичные_расчеты").OpenRecordset

на

Visual Basic
1
Set rs = db.OpenRecordset("select * from БД_Первичные_расчеты")

Все, теперь работает. Огромное спасибо!
Приятно знать, что в 2018 форумы все так же актуальны и полезны

Добавлено через 36 минут
mobile, еще один мелкий нюанс. Как можно обновить окно Access после исполнения скрипта? Пробовал что-то типа db.SendKeys («{F5}»), выдает ошибку, мол, «объект не поддерживает данное свойство или метод».



1



0 / 0 / 0

Регистрация: 25.04.2020

Сообщений: 1

25.04.2020, 18:09

6

Всем привет!Ребята плиз, хэлп нужна помощь в написании макроса.
Есть БД в Access, необходимо из нее перенести данные в Excel, но всей допустим таблицы, а какие либо строки))

 Комментарий модератора 
вам бы следовало создать свою тему



0



Содержание

  • Импортировать файл Excel в Access
  • Доступ к экспорту VBA в новый файл Excel
  • Экспорт в существующий файл Excel
  • Функция экспорта в новый файл Excel

В этом руководстве будут рассмотрены способы импорта данных из Excel в таблицу Access и способы экспорта объектов Access (запросов, отчетов, таблиц или форм) в Excel.

Импортировать файл Excel в Access

Чтобы импортировать файл Excel в Access, используйте acImport вариант DoCmd.TransferSpreadsheet :

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, «Table1», «C:  Temp  Book1.xlsx», True

Или вы можете использовать DoCmd.TransferText чтобы импортировать файл CSV:

DoCmd.TransferText acLinkDelim,, «Таблица1», «C:  Temp  Book1.xlsx», True

Импортировать Excel в функцию доступа

Эту функцию можно использовать для импорта файла Excel или CSV в таблицу доступа:

Открытая функция ImportFile (имя файла как строка, HasFieldNames как логическое, TableName как строка) как логическое »Пример использования: call ImportFile (« Выбрать файл Excel »,« Файлы Excel »,« * .xlsx »,« C:  », True , True, "ExcelImportTest", True, True, false, True) При ошибке Перейти к err_handler If (Right (Filename, 3) = "xls") или ((Right (Filename, 4) = "xlsx")) Then DoCmd. TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, TableName, Filename, blnHasFieldNames End If If (Right (Filename, 3) = "csv") Then DoCmd.TransferText acLinkDelim`` TableName, Filename, True End If Exit_Thing if: 'Очистить связанный в' Таблица Excel уже существует … и удалите ее, если это так. Если ObjectExists ("Table", TableName) = True Then DropTable (TableName) Установить colWorksheets = Nothing Функция выхода err_handler: If (Err.Number = 3086 или Err.Number = 3274 или Err. Number = 3073) And errCount <3 Then errCount = errCount + 1 ElseIf Err.Number = 3127 Then MsgBox "Поля на всех вкладках одинаковы. Убедитесь, что каждый лист имеет точные имена столбцов, если вы хотите импортировать несколько ", vbCritical," MultiSheets не идентичны "ImportFile = False GoTo Exit_Thing Else MsgBox Err.Number &" - ​​"& Err.Description ImportFile = False GoTo Exit_Thing Resume End If End Function

Вы можете вызвать функцию так:

Private Sub ImportFile_Example () Вызов VBA_Access_ImportExport.ImportFile ("C:  Temp  Book1.xlsx", True, "Imported_Table_1") End Sub

Чтобы экспортировать объект Access в новый файл Excel, используйте DoCmd.OutputTo метод или DoCmd.TransferSpreadsheet метод:

Экспорт запроса в Excel

Эта строка кода VBA экспортирует запрос в Excel с помощью DoCmd.OutputTo:

DoCmd.OutputTo acOutputQuery, "Query1", acFormatXLSX, "c:  temp  ExportedQuery.xls"

Или вы можете использовать вместо этого метод DoCmd.TransferSpreadsheet:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, «Query1», «c:  temp  ExportedQuery.xls», True

Примечание: Этот код экспортирует в формат XLSX. Вместо этого вы можете обновить аргументы для экспорта в формат файла CSV или XLS (например, acFormatXLSX к acFormatXLS).

Экспорт отчета в Excel

Эта строка кода экспортирует отчет в Excel с помощью DoCmd.OutputTo:

DoCmd.OutputTo acOutputReport, «Report1», acFormatXLSX, «c:  temp  ExportedReport.xls»

Или вы можете использовать вместо этого метод DoCmd.TransferSpreadsheet:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, «Report1», «c:  temp  ExportedReport.xls», True

Экспорт таблицы в Excel

Эта строка кода экспортирует таблицу в Excel с помощью DoCmd.OutputTo:

DoCmd.OutputTo acOutputTable, «Table1», acFormatXLSX, «c:  temp  ExportedTable.xls»

Или вы можете использовать вместо этого метод DoCmd.TransferSpreadsheet:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, «Table1», «c:  temp  ExportedTable.xls», True

Экспорт формы в Excel

Эта строка кода экспортирует форму в Excel с помощью DoCmd.OutputTo:

DoCmd.OutputTo acOutputForm, «Form1», acFormatXLSX, «c:  temp  ExportedForm.xls»

Или вы можете использовать вместо этого метод DoCmd.TransferSpreadsheet:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, «Form1», «c:  temp  ExportedForm.xls», True

Экспорт в функции Excel

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

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

Экспорт в существующий файл Excel

Приведенные выше примеры кода отлично подходят для экспорта объектов Access в новый файл Excel. Однако их нельзя будет экспортировать в существующую книгу.

Чтобы экспортировать объекты Access в существующую книгу Excel, мы создали следующую функцию:

Общедоступная функция AppendToExcel (strObjectType как строка, strObjectName как строка, strSheetName как строка, strFileName как строка) Dim rst as DAO.Recordset Dim ApXL As Excel.Application Dim xlWBk As Excel.Workbook Dim xlWSh Asim Integer. As Long = -4161 Const xlCenter As Long = -4108 Const xlBottom As Long = -4107 Const xlContinuous As Long = 1 Выберите регистр strObjectType Case "Таблица", "Запрос" Установить rst = CurrentDb.OpenRecordset (strObjectName, dbOpenDynaset, dbOpenDynaset, dbOpenDynaset, dbeeSee "Form" Set rst = Forms (strObjectName) .RecordsetClone Case "Report" Set rst = CurrentDb.OpenRecordset (Reports (strObjectName) .RecordSource, dbOpenDynaset, dbSeeChanges) End Select If rst.RecordCount = 0 Then No records to be exported = 0 Then No records to be exported . ", vbInformation, GetDBTitle Остальное при ошибке Возобновить Далее Установить ApXL = GetObject (," Excel.Application ") Если Err.Number 0 Затем Установить ApXL = CreateObject (" Excel.Application ") Конец, если Err.Clear ApXL.Visible = False Установите xlWBk = ApXL.Workbooks.Open (strFil eName) Задайте xlWSh = xlWBk.Sheets.Add xlWSh.Name = Left (strSheetName, 31) xlWSh.Range ("A1"). Выберите "Выполнить до тех пор, пока intCount = rst.fields.Count ApXL.ActiveCell = rst.fields (intCount)". Назовите ApXL.ActiveCell.Offset (0, 1) .Select intCount = intCount + 1 Loop rst.MoveFirst xlWSh.Range ("A2"). CopyFromRecordset rst With ApXL .Range ("A1"). Select .Range (.Selection, .Selection.End (xlToRight)). Выберите .Selection.Interior.Pattern = xlSolid .Selection.Interior.PatternColorIndex = xlAutomatic .Selection.Interior.TintAndShade = -0.25 .Selection.Interior.PatternTintAndShade = 0. xlNone .Selection.AutoFilter .Cells.EntireColumn.AutoFit .Cells.EntireRow.AutoFit .Range ("B2"). Выберите .ActiveWindow.FreezePanes = True .ActiveSheet.Cells.Select .ActiveSheet.Cells.WrapText.Cells. .EntireColumn.AutoFit xlWSh.Range ("A1"). Выберите .Visible = True End With 'xlWB.Close True' Set xlWB = Nothing 'ApXL.Quit' Set ApXL = Nothing End If End Function

Вы можете использовать эту функцию так:

Private Sub AppendToExcel_Example () Вызов VBA_Access_ImportExport.ExportToExcel («Таблица», «Таблица1», «VBASheet», «C:  Temp  Test.xlsx») End Sub

Обратите внимание, что вас просят определить:

  • Что выводить? Таблица, отчет, запрос или форма
  • Имя объекта
  • Имя выходного листа
  • Путь и имя выходного файла.

Экспорт SQL-запроса в Excel

Вместо этого вы можете экспортировать SQL-запрос в Excel, используя аналогичную функцию:

Открытая функция AppendToExcelSQLStatemet (strsql As String, strSheetName As String, strFileName As String) Dim strQueryName As String Dim ApXL As Excel.Application Dim xlWBk As Excel.Workbook Dim xlWSh As Excel.Worksheet Dim intCount10 As Integer Const x xlBottom As Long = -4107 Const xlVAlignCenter = -4108 Const xlContinuous As Long = 1 Dim qdf As DAO.QueryDef Dim rst As DAO.Recordset strQueryName = "tmpQueryToExportToExcel" IfldueryName.StrleteQeueryDueryName, strleteQext Конец Если Установить qdf = CurrentDb.CreateQueryDef (strQueryName, strsql) Установить rst = CurrentDb.OpenRecordset (strQueryName, dbOpenDynaset) Если rst.RecordCount = 0 Тогда MsgBox «Нет записей для экспорта. ApXL = GetObject (, "Excel.Application") Если Err.Number 0, тогда установите ApXL = CreateObject ("Excel.Application") End If Err.Clear ApXL.Visible = False Set xlWBk = ApXL.Workbooks.Open (strFileName) Set xlWSh = xlWBk.Sheet s.Add xlWSh.Name = Left (strSheetName, 31) xlWSh.Range ("A1"). Выберите "Do until intCount = rst.fields.Count ApXL.ActiveCell = rst.fields (intCount) .Name ApXL.ActiveCell.Offset ( 0, 1) .Select intCount = intCount + 1 Loop rst.MoveFirst xlWSh.Range ("A2"). CopyFromRecordset rst With ApXL .Range ("A1"). Select .Range (.Selection, .Selection.End (xlToRight) ) .Select .Selection.Interior.Pattern = xlSolid .Selection.Interior.PatternColorIndex = xlAutomatic .Selection.Interior.TintAndShade = -0.25 .Selection.Interior.PatternTintAndShade = 0 .Selection.Borders.LineStyle. … ("A1"). Выберите .Visible = True End With 'xlWB.Close True' Set xlWB = Nothing 'ApXL.Quit' Set ApXL = Nothing End If End Function

Вызывается так:

Private Sub AppendToExcelSQLStatemet_Example () Вызов VBA_Access_ImportExport.ExportToExcel («SELECT * FROM Table1», «VBASheet», «C:  Temp  Test.xlsx») End Sub

Где вас просят ввести:

  • SQL-запрос
  • Имя выходного листа
  • Путь и имя выходного файла.

Функция экспорта в новый файл Excel

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

Открытая функция ExportToExcel (strObjectType как строка, strObjectName как строка, необязательный strSheetName как строка, необязательный strFileName как строка) Dim rst as DAO.Recordset Dim ApXL As Object Dim xlWBk As Object Dim xlWSh As Object Dim intCount As Integer Const xlWSh As Object Dim intCount As Integer Const xlWSh As Object Dim intCount As Integer Const 4161 Const xlCenter As Long = -4108 Const xlBottom As Long = -4107 Const xlContinuous As Long = 1 При ошибке GoTo ExportToExcel_Err DoCmd.Hourglass True Select Case strObjectType Case "Table", "Query" Set rst = CurrentDb.OpenrRecordSet (strObjectType) , dbSeeChanges) Case "Form" Set rst = Forms (strObjectName) .RecordsetClone Case "Report" Set rst = CurrentDb.OpenRecordset (Reports (strObjectName) .RecordSource, dbOpenDynaset, dbSeeChanges) End Select If rst.Rec записи для экспорта. ", vbInformation, GetDBTitle DoCmd.Hourglass False Else При ошибке Возобновить Далее Установить ApXL = GetObject (," Excel.Application ") Если Err.Number 0 Затем Установить ApXL = CreateObject (" Excel.Application ") Конец Если Err. Очистить при ошибке Перейти к ExportToExcel_Err Установить xlWBk = ApXL.Workbooks.Add ApXL.Visible = False Установить xlWSh = xlWBk.Worksheets ("Sheet1") Если Len (strSheetName)> 0 Тогда xlWSh.Name = Left (31) Если xlWSh.Name = Left (31) If xlWSh EndheetName .Range ("A1"). Выберите "Сделать до" intCount = rst.fields.Count ApXL.ActiveCell = rst.fields (intCount) .Name ApXL.ActiveCell.Offset (0, 1). Выберите intCount = intCount + 1 Loop rst. MoveFirst xlWSh.Range ("A2"). CopyFromRecordset rst With ApXL .Range ("A1"). Select .Range (.Selection, .Selection.End (xlToRight)). Select .Selection.Interior.Pattern = xlSolid .Selection. Interior.PatternColorIndex = xlAutomatic .Selection.Interior.TintAndShade = -0.25 .Selection.Interior.PatternTintAndShade = 0 .Selection.Borders.LineStyle = xlNone .Selection.AutoFilter .Cells.EnutoColumn.AutoFilter .Cells.EnutoColumn.AutoFilter. B2 "). Выберите .ActiveWindow.FreezePanes = True .ActiveSheet.Cells.Select .ActiveSheet.Cells.WrapText = False .ActiveSheet.Cells.EntireColumn.AutoFit xlWSh.Range (" A1 "). Выберите .Visible = True End Wi th retry: If FileExists (strFileName) Then Kill strFileName End If If if strFileName "" Then xlWBk.SaveAs strFileName, FileFormat: = 56 End If rst.Close Set rst = Nothing DoCmd.Hourglass False End If ExportToExcel_Exit_Exit: DoC ExportToExcel_Err: DoCmd.SetWarnings True MsgBox Err.Description, vbExclamation, Err.Number DoCmd.Hourglass False Resume ExportToExcel_Exit End Function

Функцию можно вызвать так:

Private Sub ExportToExcel_Example () Вызов VBA_Access_ImportExport.ExportToExcel ("Table", "Table1", "VBASheet") End Sub

Skip to content

На чтение 2 мин. Просмотров 1.8k.

Что делает макрос: В некоторых случаях, вам или вашим клиентам, возможно, потребуется переключить фокус на форму доступа. Этот пример демонстрирует, как вы можете открыть форму Access из Excel.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Как макрос работает

С помощью этого макроса, вы указываете Excel базу данных Access и вызываете определенную форму доступа, чтобы открыть.
Для автоматизации доступа, необходимо установить ссылку на библиотеку объектов Microsoft Access. Для этого откройте VBA в Excel и выберите Tools➜References. Откроется диалоговое окно «References». Прокрутите вниз, пока вы найдите запись Microsoft Access XX Object Library, где XX — это ваша версия Access. Выберите флажок рядом с записью.

Код макроса

Sub OtkritFormuAccess()
'Шаг 1: Объявляем переменные
Dim AC As Access.Application

'Шаг 2: Запустите Access и откройте целевую базу данных
Set AC = New Access.Application
AC.OpenCurrentDatabase _
("C:TempYourAccessDatabase.accdb")

'Шаг 3: Откройте целевую форму и сделайте доступ видимым
With AC
.DoCmd.OpenForm "MainForm", acNormal
.Visible = True
End With
End Sub

Как этот код работает

  1. объявляем переменную объекта AC. Эта переменная открывает библиотеку приложений баз данных Access.
  2. используем переменную AC, чтобы открыть базу данных Microsoft Access, где находятся целевые формы.
  3. открываем соответствующую форму. Форма Access открывается в новом окне Microsoft Access. Обратите внимание, что вы не закрывали базу данных в последней строке шага 3.

Как использовать

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

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

Понравилась статья? Поделить с друзьями:
  • Помощник по формулам excel
  • Помощник по работе на excel
  • Помощник для работы в excel
  • Помощник для word скачать
  • Помощник для microsoft word