Как создать цикл в Access VBA / SQL для выбора записей и вывода в Excel?

Мне нужна помощь в написании кода VBA / SQL в модуле Access, который должен сделать следующее:

Может ли кто-нибудь дать мне начальные баллы? Имейте в виду, что я очень мало знаю об VBA или SQL, и я очень много начинаю с нуля, поэтому даже самые основные объяснения были бы очень полезными!

Спасибо, AVN

Я ничего не вижу в вашем вопросе, который указывает, что вам нужно что-то сложное.

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

Теперь, если вы хотите автоматизировать это, он становится более сложным, потому что этот параметр будет мешать.

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

Private Sub cmdOutputSchool_Click() If IsNull(Me!cmbSchool) Then MsgBox "You must first choose a school from the dropdown.", _ vbExclamation, "Choose a school" Else DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _ "qrySchoolOutput", CurrentProject.Path & "\" & Me!cmbSchool & ".xls" End If End Sub 

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

Если вы хотите, чтобы он был автоматизирован, одним из простых способов сделать это было бы привязать форму к таблице «Школы» и связать ваш запрос с отображением имени школы в форме. Затем вы можете запустить командную кнопку через записи формы и вывести отчет для каждой школы:

  Private Sub cmdOutputSchool_Click() With Me.RecordsetClone .MoveFirst Do Until .EOF Me.Bookmark = .Bookmark DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _ "qrySchoolOutput", CurrentProject.Path & "\" & Me!SchoolName & ".xls" .MoveNext Loop End With End Sub 

Это будет выводить таблицу для каждой школы в таблице, которую вы привязали к форме.

Было бы проще создать запрос, который объединяет две таблицы в школе, а затем использовать стержень в excel со школой в качестве страницы и использовать страницы для показа каждой школы на отдельной странице

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

Затем в VBA вы используете контрольный цикл do, который продолжается в школе. EOF = false и для каждой школьной записи получают набор записей childdata и помещают его в Excel

Я хотел бы сделать это в Excel VBA и использовать copyfromrecordset, чтобы поместить данные в Excel – достаточно просто, чтобы создать новый лист для каждой школы и установить имя листа в школу. Вам нужно будет добавить соответствующие ссылки на проект VBA – DAO или ADO – чтобы иметь возможность подключаться к данным Access.

Как уже упоминалось, вы можете использовать «» внутри строки, чтобы получить цитату. Пример:

 MsgBox "I am an ""Example""." 

Что касается другого, вам не нужен VBA для этого. Вы можете сделать это с помощью запроса:

 SELECT ChildData.* INTO [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Example.xls].[MyWorksheet] FROM ChildData INNER JOIN Schools ON ChildData.SchoolName = Schools.SchoolName; 

Конечно, вы можете сделать то же самое с VBA, если вам действительно хочется:

 CurrentDB.Execute "SELECT ChildData.* INTO [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Example.xls].[MyWorksheet] FROM ChildData INNER JOIN Schools ON ChildData.SchoolName = Schools.SchoolName;" 

Еще одним способом было бы создать запрос выбора, который вытащил ваши данные, а затем использовать DoCmd.OutputTo:

 DoCmd.OutputTo acOutputQuery,"MyQuery",acFormatXLS,"C:\Test.xls" 

Вы также можете использовать DoCmd.TransferSpreadsheet:

 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "MyQuery", "C:\Test.xls", True 
  • Поиск дублирующего значения и различие с другими значениями с помощью Excel / SQL
  • Функции трансляции и конвертации не поддерживаются при преобразовании формата столбца в дату (в vbscript - Excel adodb)
  • Обновить запрос SQL Server с данными Excel
  • VBA: вызов хранимой процедуры SQL Server с двумя аргументами
  • Оператор SQL - INSERT с преобразованием BIT
  • Запрос ADO листа с длинными именами в ошибке Jet
  • Данные .NET Excel с использованием SqlBulkCopy
  • SQL SELECT / CASE запрос с несколькими столбцами возвращает системная ошибка: & H80040E14 (-2147217900)
  • SQL Server не может загрузить файл excel
  • Связанные таблицы сводной таблицы Excel, не отображающие данные для вычисленного поля в Access
  • Сообщение об ошибке VBA sheet1 $
  • Interesting Posts

    Внедрить и выполнить код Excel VBA в электронную таблицу, полученную от внешнего источника

    Выполнение цикла и If Statement в Excel

    Создайте дату на две ячейки – одну с датой и другую с часом в Excel

    проверка kurtois и skewnes для нормальной переменной

    с помощью write.xlsx заменить существующий лист на R-пакет xlsx

    Макрос для копирования ячеек из одной открытой книги в другую открытую рабочую книгу … если я не знаю их путь к файлу

    UserForm не появляется после нажатия кнопки

    как экспортировать изображение в файл Excel без установленного Excel (с использованием ASP.Net/VB.Net)

    Таблица Excel для работы

    Excel VBA Как редактировать каждую ячейку с формулой на листе

    Как снять защиту из книги Excel

    Excel VBA заполняет первую пустую строку по сравнению с первой строкой с пустой колонкой A

    Как заполнить столбец excel, используя условие

    Блокировать редактирование в некоторых ячейках, но без дополнительной защиты

    Как настроить Cyber-ark для автоматического обновления пароля для приложения DCOM

    Давайте будем гением компьютера.