- Remove From My Forums
-
Question
-
Hi
I want to create an Excelfile with Colume names and three named sheets. Is it possible?
The file should be created in a certain folder:
Like:Dim filefolder as String
filefolder = [Forms]![Alla Val]![EgenPathAnnat]All cells but Antal and Leverensdag as text
Antal as Integer
Leveransdag as date.The look of the new file as below
Best // Peter Forss Stockholm GMT +1.00
Answers
-
This should be what you’re after.
Public Sub GenXLSFile() '#Const EarlyBind = True 'Use Early Binding, Req. Reference Library #Const EarlyBind = False 'Use Late Binding #If EarlyBind = True Then 'Early Binding Declarations Dim oExcel As Excel.Application Dim oExcelWrkBk As Excel.WorkBook Dim oExcelWrSht As Excel.WorkSheet #Else 'Late Binding Declaration/Constants Dim oExcel As Object Dim oExcelWrkBk As Object Dim oExcelWrSht As Object Const xlCenter = -4108 #End If Dim bExcelOpened As Boolean Dim iCols As Integer 'Start Excel On Error Resume Next Set oExcel = GetObject(, "Excel.Application") 'Bind to existing instance of Excel If Err.Number <> 0 Then 'Could not get instance of Excel, so create a new one Err.Clear On Error GoTo Error_Handler Set oExcel = CreateObject("Excel.Application") bExcelOpened = False Else 'Excel was already running bExcelOpened = True End If On Error GoTo Error_Handler oExcel.ScreenUpdating = False oExcel.Visible = False 'Keep Excel hidden until we are done with our manipulation Set oExcelWrkBk = oExcel.Workbooks.Add() 'Start a new workbook Set oExcelWrSht = oExcelWrkBk.Sheets(1) 'Delete extra sheets, if any exist Do While oExcelWrkBk.Sheets.Count > 1 oExcelWrkBk.Sheets(1).Delete Loop 'Add the extra 2 sheets we want oExcelWrkBk.Sheets.Add after:=oExcelWrSht, Count:=2 ' oExcelWrkBk.Sheets.Add , , oExcelWrkBk.Worksheets(oExcelWrkBk.Worksheets.Count), 2 'Rename the newly added sheets oExcelWrkBk.Sheets(2).Name = "VaraKunder" oExcelWrkBk.Sheets(3).Name = "VaraArtiklar" 'Populate the first sheet like we want it oExcelWrSht.Activate With oExcelWrSht .Name = "Order" oExcelWrSht.Range("A1").Value = "Artikel" oExcelWrSht.Range("B1").Value = "Artikelben" oExcelWrSht.Range("C1").Value = "Antal" oExcelWrSht.Range("F1").Value = "Kundnummer" oExcelWrSht.Range("G1").Value = "Leveransdag" .Range("A1").Select End With oExcelWrkBk.SaveAs Forms![Alla Val].Form.[EgenPathAnnat] & "YourFileName.xlsx", 51 oExcelWrkBk.Close If oExcel.Workbooks.Count < 2 Then oExcel.Quit End If Error_Handler_Exit: On Error Resume Next ' oExcel.Visible = True 'Make excel visible to the user Set oExcelWrSht = Nothing Set oExcelWrkBk = Nothing oExcel.ScreenUpdating = True Set oExcel = Nothing Exit Sub Error_Handler: MsgBox "The following error has occured" & vbCrLf & vbCrLf & _ "Error Number: " & Err.Number & vbCrLf & _ "Error Source: GenXLSFile" & vbCrLf & _ "Error Description: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _ , vbOKOnly + vbCritical, "An Error has Occured!" Resume Error_Handler_Exit End Sub
The above is general code, but I wasn’t sure if the Excel should remain open and display the file or close down… But this definitely should get you going in the right direction. You can also use .NumberFormat to format the ranges as you need (Text,
Numbers, Date/Time, …).
Daniel Pineault, 2010-2017 Microsoft MVP
Professional Support: http://www.cardaconsultants.com
MS Access Tips and Code Samples: http://www.devhut.net-
Edited by
Monday, October 2, 2017 7:46 PM
-
Marked as answer by
ForssPeterNova
Tuesday, October 3, 2017 1:31 PM
-
Edited by
Содержание
- Как создать файл Excel с помощью VBA
- Код макроса
- Как работает этот код
- Как использовать
- Метод CreateTextFile
- Синтаксис
- Замечания
- См. также
- Поддержка и обратная связь
- Vba access создать файл excel
- Answered by:
- Question
- Answers
- All replies
- Выгрузка данных из Access в шаблон Word и Excel
- Экспорт данных из Access в шаблон Word
- Код VBA для выгрузки данных в шаблон Word
- Экспорт данных из Access в шаблон Excel
- Код VBA для выгрузки данных в шаблон Excel
- Как создать файл Excel с помощью VBA
Как создать файл Excel с помощью VBA
Что делает макрос: Следующий макрос копирует диапазон ячеек из активного листа и вставляет данные в новую книгу.
Код макроса
Как работает этот код
- Копируем данные из ячеек B4:С15. Обратите внимание, что мы указываем полный адрес с именем листа и диапазона. Это позволит не допустить ошибки, если у Вас открыто несколько файлов Excel одновременно.
- Используем метод Add объекта Workbook, чтобы создать новую рабочую книгу. Это тоже самое, если бы мы вручную нажали Файл➜Создать➜Новый документ
- На этом этапе используется метод Paste, чтобы отправить данные, которые вы скопировали в ячейку А1 новой книги. Обратите внимание на то, что код ссылается на объект ActiveSheet. При создании новой книги она тут же становится активной. Если быть точнее, то становится активный лист в новой (только что созданной) книге.
- Далее используем метод DisplayAlerts. Используя свойство False — отключаем системные предупреждения Excel. Можно этого не делать, но мы можем запустить этот макрос несколько раз, и в этом случае Excel будет пытаться сохранить один и тот же файл несколько раз. Что происходит, когда вы пытаетесь сохранить книгу несколько раз? Правильно — Excel предупреждает, что в папке уже есть файл с таким же именем и спрашивает: «Хотите ли вы переписать ранее существующий файл?». Если мы не хотим, чтобы Excel при каждом сохранении спрашивал нас — подавляем это предупреждение.
- Сохраняем файл с помощью метода SaveAs. Обратите внимание, что мы пишем полный адрес, включая имя файла с расширением (при сохранении на рабочий стол
ActiveWorkbook.SaveAs CreateObject(«WScript.Shell»). SpecialFolders(«Desktop») & «Отчет на 2016.xlsx»). - Поскольку мы запретили показывать системные сообщения в пункте 4, мы должны включить их обратно. Если этого не сделать Excel будет подавлять все предупреждения, что не
допустимо.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код во вновь созданном модуле.
- Измените имя листа, диапазон ячеек, и место сохранения файла.
Источник
Метод CreateTextFile
Создает указанное имя файла и возвращает объект TextStream , который можно использовать для чтения или записи в файл.
Синтаксис
object. CreateTextFile (имя файла, [ перезапись, [ юникод ]])
Синтаксис метода CreateTextFile состоит из следующих частей:
Part | Описание |
---|---|
object | Обязательно. Всегда имя объекта FileSystemObject или Folder . |
Имени файла | Обязательно. Строковое выражение, определяющее файл, который требуется создать. |
Перезаписать | Необязательный параметр. Значение Boolean, указывающее, требуется ли перезаписывать существующий файл. Имеет значение True, если файл можно перезаписать, и False в противном случае. Если этот параметр опущен, существующие файлы могут быть перезаписаны. |
Юникода | Необязательный параметр. Значение Boolean, указывающее, будет ли файл создан в формате Юникод или ASCII. Значение True, если файл будет создан в формате Юникод, значение False, если требуется создать ASCII-файл. Если этот элемент опущен, создается ASCII-файл. |
Замечания
В следующем коде показано, как использовать метод CreateTextFile для создания и открытия текстового файла. Если аргумент overwrite имеет значение False или не задан, то значение атрибута filename, указывающее на существующий файл, приведет к возникновению ошибки.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Vba access создать файл excel
This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.
Answered by:
Question
I want to create an Excelfile with Colume names and three named sheets. Is it possible?
The file should be created in a certain folder:
Like:
Dim filefolder as String
filefolder = [Forms]![Alla Val]![EgenPathAnnat]
All cells but Antal and Leverensdag as text
Antal as Integer
Leveransdag as date.
The look of the new file as below
Best // Peter Forss Stockholm GMT +1.00
Answers
This should be what you’re after.
The above is general code, but I wasn’t sure if the Excel should remain open and display the file or close down. But this definitely should get you going in the right direction. You can also use .NumberFormat to format the ranges as you need (Text, Numbers, Date/Time, . ).
Daniel Pineault, 2010-2017 Microsoft MVP
Professional Support: http://www.cardaconsultants.com
MS Access Tips and Code Samples: http://www.devhut.net
- Edited by Daniel Pineault (MVP) MVP Monday, October 2, 2017 7:46 PM
- Marked as answer by ForssPeterNova Tuesday, October 3, 2017 1:31 PM
You can use Excel Automation to create the Workbook and save it to a file. Below is a link to an example:
Once the Workbook has been created you can use the SaveAs method of the Workbook object to save it to a file.
Microsoft MVP (Visual Basic)
Just a thought (I can’t test the idea right now). You can also try creating three empty queries named as the tabs in the spreadsheet and then use the TransferSpreadsheet method for each query to save the empty data into the same file name.
A couple of weeks ago, I spent quite some time trying to make a highly customized excel file for my database with similar idea to what you’re doing. I needed separate tabs and specific formatting. In my case, I needed a different tab per field in a query/table. I think if you create a Table just called tblExcelTabs and you can have a field called «TabNAMES» then type out a record per tab you want. for example «Tab 1», «Tab 2», and «Tab 3.» Then you can do a button to create your Excel like. not tested, but it’s a snippet of the code I’m using air typed with what you need (I think).
EDIT: Fixed a couple of typos and tested this, it works! Just modify it to add your file path and save it instead of just opening. Also format to your preference as described in your post. You can even color code it and set the lengths of each column.
This should be what you’re after.
The above is general code, but I wasn’t sure if the Excel should remain open and display the file or close down. But this definitely should get you going in the right direction. You can also use .NumberFormat to format the ranges as you need (Text, Numbers, Date/Time, . ).
Источник
Выгрузка данных из Access в шаблон Word и Excel
Всем привет, сегодня мы поговорим о том, как можно выгрузить данные из Access в такие приложения как Word и Excel. Но не о стандартном способе, который есть в Access (связь с Office), а о способе, который позволяет выгружать данные в заданный шаблон как в Word, так и в Excel.
Другими словами, это нужно тогда, когда создать отчет в Access по шаблону, который уже существует, например, в Word, невозможно или слишком трудоемко. Как Вы знаете, отчет в Access может выводиться просто коряво или, самый распространенный вариант, это когда много текста, который в отчете Access не так хорошо форматируется как в Word, а данных не так много, но отчет необходимо автоматизировать, например это какие-то договора, заявления и так далее.
Использование слияния из самого Word-а не очень удобно, поэтому сегодня я расскажу, как можно заполнять такие шаблоны напрямую из Access, путем нажатия на одну кнопку.
Кроме выгрузки в шаблон Word, иногда возникает и необходимость выгрузки в шаблон Excel, и этот способ мы тоже сегодня рассмотрим.
Экспорт данных из Access в шаблон Word
Вся разработка делится на две части, это:
- Настройка шаблона Word;
- Настройка выгрузки данных в шаблон.
Суть настройки шаблона заключается в том, чтобы проставить необходимые поля в тех местах шаблона, где нужно выводить те или иные данные. Это делается с помощью полей формы.
Примечание! Я использую Microsoft Word 2003.
Открываем шаблон Word, для начала добавим необходимую панель инструментов, для этого нажимаем «Вид -> Панель инструментов» и ставим галочку «Формы». Теперь у Вас отобразилась панель инструментом «Формы». Все, что осталось сделать — это вставить в местах, в которых необходимо выводить данные, элементы «Текстовое поле», которые доступны на только что добавленной панели инструментов.
После добавления поля, у Вас появится серая область, которая свидетельствует о том, что поле добавлено. Теперь необходимо задать имя этого поля, для того чтобы потом из access вставлять в него значения (стандартное названия не очень удобное). Для этого щелкните правой кнопкой мыши по полю и нажмите «Свойства». В поле закладка напишите желаемое имя этого поля, я в примере назвал его MyTestPole.
Создайте столько полей, сколько Вам нужно.
На этом настройка шаблона закончена, рекомендую сделать этот шаблон только для чтения, а то пользователь возьмет, сформирует документ и сохранит его, и шаблон тем самым потеряется, а если сделать его только для чтения, то у него такой возможности не будет, только сохранять через «Сохранить как».
Переходим к более интересной задачи, это к реализации самой выгрузки из Access в этот шаблон на VBA.
Примечание! Я использую Access в связке с MS SQL 2008, поэтому и данные буду брать от туда.
Код VBA для выгрузки данных в шаблон Word
Допустим, у Вас есть форма, сделайте на ней кнопку (я назвал ее testbutton) и в событие нажатие кнопки вставьте следующий код VBA:
Код прокомментирован, поэтому сложностей возникнуть не должно. Здесь весь смысл сводится к созданию объекта word.document и word.application. А после мы уже работаем с нашими объектами, т.е. заполняем их.
Экспорт данных из Access в шаблон Excel
В шаблоне Excel уже не нужно создавать поля как в Word, так как здесь мы уже будем ориентироваться по адресам ячеек.
Существует несколько способов, как заполнять Excel шаблон, я опишу два, первый — это тогда, когда Вам просто необходимо проставить несколько полей, т.е. в источнике данных будет всего одна строка с несколькими столбцами. Второй — это когда строк будет уже несколько, причем Вы не знаете, сколько именно (в зависимости от каких то условий). В шаблоне по умолчанию отведено для этого все пару строк, поэтому мы будем нужные нам строки добавлять, для того чтобы наши данные не накладывалась на строки ниже (допустим там примечание, подпись руководителя и т.д.). И совет, я здесь, для примера, использую всего один источник данных, а Вы, если Вам необходимо заполнить шапку, примечание и некое количество строк (т.е. область данных), можете использовать несколько источников (Recordset).
Код VBA для выгрузки данных в шаблон Excel
Сначала добавьте кнопку на форму (я ее назвал testexcel) и вставьте следующий код в событие «Нажатие кнопки».
Здесь я также все подробно прокомментировал, но если есть вопросы, то задавайте их в комментариях к данной статье.
Источник
Как создать файл Excel с помощью VBA
01 Что делает макрос
Следующий макрос копирует диапазон ячеек из активного листа и вставляет данные в новую книгу.
- Sub SozdatFajl()
- ‘Шаг 1 — копируем данные с листа
- Sheets( «Продажи» ).Range( «B4:C15» ).Copy
- ‘Шаг 2 — создаем новую книгу
- Workbooks.Add
- ‘Шаг 3 — вставляем данные
- ActiveSheet.Paste Destination:=Range( «A1» )
- ‘Шаг 4 — отключаем системные сообщения
- Application.DisplayAlerts = False
- ‘Шаг 5 — сохраняем по нужному адресу
- ActiveWorkbook.SaveAs _ Filename:= «C:ОтчетыПродажиМесяц.xlsx»
- ‘Шаг 6 — включаем системные сообщения
- Application.DisplayAlerts = True
- End Sub
03 Как работает макрос
1. Копируем данные из ячеек B4:С15. Обратите внимание, что мы указываем полный адрес с именем листа и диапазона. Это позволит не допустить ошибки, если у Вас открыто несколько файлов Excel одновременно.
2. Используем метод Add объекта Workbook, чтобы создать новую рабочую книгу. Это тоже самое, если бы мы вручную нажали Файл➜Создать➜Новый документ
3. На этом этапе используется метод Paste, чтобы отправить данные, которые вы скопировали в ячейку А1 новой книги. Обратите внимание на то, что код ссылается на объект ActiveSheet. При создании новой книги она тут же становится активной. Если быть точнее, то становится активный лист в новой (только что созданной) книге.
4. Далее используем метод DisplayAlerts. Используя свойство False — отключаем системные предупреждения Excel. Можно этого не делать, но мы можем запустить этот макрос несколько раз, и в этом случае Excel будет пытаться сохранить один и тот же файл несколько раз. Что происходит, когда вы пытаетесь сохранить книгу несколько раз? Правильно — Excel предупреждает, что в папке уже есть файл с таким же именем и спрашивает: «Хотите ли вы переписать ранее существующий файл?». Если мы не хотим, чтобы Excel при каждом сохранении спрашивал нас — подавляем это предупреждение.
5. Сохраняем файл с помощью метода SaveAs. Обратите внимание, что мы пишем полный адрес, включая имя файла с расширением (при сохранении на рабочий стол ActiveWorkbook.SaveAs CreateObject(«WScript.Shell»). SpecialFolders(«Desktop») & «Отчет на 2016.xlsx»).
6. Поскольку мы запретили показывать системные сообщения в пункте 4, мы должны включить их обратно. Если этого не сделать Excel будет подавлять все предупреждения, что не допустимо.
Источник
In Access, you need to prefix the Excel application objects with the Excel application instance, for example:
With MeuExcel.Worksheets(4).QueryTables.Add( _
connection:=recordset, _
Destination:=Range("A2"))
End With
Furthermore, unless you have a reference to the Excel library, ypu will need to provide the value for built-in Excel constants.
It is a very bad idea to use the name of objects for variables. Do not say:
Dim recordset As recordset
Set recordset = New recordset
Say, for example:
Dim rs As recordset
Or much better:
Dim rs As New ADODB.Recordset
If you have a suitable reference. You can then skip CreateObject.
EDIT
The provider must be the Access OLEDB 10 provider, as used to bind recordsets. This works for me to create a data table via Access using SQL Server:
strConnect = "Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=True;" _
& "Data Source=XYZSQLEXPRESS;Integrated Security=SSPI;" _
& "Initial Catalog=TestDB;Data Provider=SQLOLEDB.1"
Отчет Access имеет известные достоинства, такие как простота формирования его структуры и
мощный аппарат компоновки исходных данных. Но есть и неудобства: пользователь для
изменения этого отчета должен вносить изменения в исходные данные базы, или, того хуже, обращаться к Разработчику для внесения поправок (напр. нужен раздел «Кому, от кого»).
Есть еще недостатки, описывать их, думаю, не стоит: понятно.
Предлагается решение:
- Создание локальной исходной таблицы — источника (t3_Sborka).
- Копирование исходных данных отчета в t3_Sborka с мин. преобразованием типов данных
(здесь в t3_Sborka данные сохраняются в поле формата STRING).
… и далее по F1: - Формирование на основе t3_Sborka перекрестного запроса NewQueryDef.
- Вывод в формат Excel NewQueryDef.
-
Уничтожение — NewQueryDef и t3_Sborka.
Я по этой теме уже публиковался на
http://www.cyberforum.ru/ms-access/thread2158558.html
но речь там идет об обратном процессе — о сохранении уже готовых таблиц Excel в БД.
Подробнее на примере БД со схемой БД учета трудоемкости изготовления изделия по заданному технологическому маршруту, где значение записи поля Итог в таблице Маршруты есть трудоемкость изготовления конкретной детали в одном из цехов предприятия. Здесь предлагается рассматривать изделие как простую совокупность входящих деталей и на практике дело намного сложнее, но это уже другая тема.
где такой код Basic :
Dim qdfNew As QueryDef
Dim D, N
Otvet = MsgBox("Обработать данные", vbOKOnly, "Отчеты Excel")
Call Заполнитьt3_Sborka
' Создайте временный QueryDef.
Set qdfNew = CurrentDb.CreateQueryDef("ДеталиОперации", "TRANSFORM Max(t3_Sborka.NCH) AS [Max-NCH] SELECT " _
& "t3_Sborka.NumStroka FROM t3_Sborka GROUP BY t3_Sborka.NumStroka ORDER BY " _
& "t3_Sborka.NumStroka, t3_Sborka.NumStolbec PIVOT t3_Sborka.NumStolbec;")
Call closeProject("Excel") 'закрыть процесс Excel
' Откройте набор записей и распечатайте отчет.
DoCmd.OutputTo acOutputQuery, "ДеталиОперации", "ExcelWorkbook(*.xlsx)", "Таблица.xlsx", True, "", , acExportQualityScreen
' Удалите новый QueryDef, потому что это демонстрация.
CurrentDb.QueryDefs.Delete "ДеталиОперации"
' Удалите источник, потому что это демонстрация.
CurrentDb.TableDefs.Delete "t3_Sborka"
Exit_Кн_Отчеты_Click:
Exit Sub
End Sub
Sub Заполнитьt3_Sborka()
Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset, rs3 As DAO.Recordset
Dim NStroka As Long, NStolb As Long
'создать t3_Sborka
CurrentDb.Execute ("CREATE TABLE t3_Sborka (t3Cod COUNTER CONSTRAINT MyFieldConstraint PRIMARY KEY, NumStroka LONG, " _
& "NumStolbec LONG, NCH STRING);")
'три выборки:
Set rs1 = CurrentDb.OpenRecordset("SELECT Детали.КодДетали, Детали.ДецимДетали, Сборки.КолДеталей FROM Детали INNER JOIN Сборки ON " _
& "Детали.КодДетали = Сборки.КодДетали WHERE Сборки.КодИзделия=" & Me.КодИзделия & " ORDER BY Сборки.КодСборки;")
Set rs2 = CurrentDb.OpenRecordset("Цеха")
Set rs3 = CurrentDb.OpenRecordset("t3_Sborka")
<cut/>
'заполнить сетку с данными
NStroka = 0
With rs3
Do Until rs1.EOF
NStroka = NStroka + 1
NStolb = 2
Do Until rs2.EOF
NStolb = NStolb + 1
.AddNew
!NumStroka = NStroka
!NumStolbec = NStolb
!NCH = DLookup("Итог", "Маршруты", "КодДетали=" & rs1!КодДетали & " And КодЦеха=" & rs2!КодЦеха)
.Update
rs2.MoveNext
Loop
rs2.MoveFirst
rs1.MoveNext
Loop
End With
rs2.Close
'заголовки строк
rs1.MoveFirst
NStroka = 0
With rs3
Do Until rs1.EOF
NStroka = NStroka + 1
.AddNew
!NumStroka = NStroka
!NumStolbec = 1
!NCH = rs1!ДецимДетали
.Update
.AddNew
!NumStroka = NStroka
!NumStolbec = 2
!NCH = rs1!КолДеталей
.Update
rs1.MoveNext
Loop
.Close
End With
rs1.Close
Exit_Заполнитьt3_Sborka:
Exit Sub
End Sub
Sub closeProject(proc As String) 'закрыть процесс Excel
Dim Process As Object, i
For Each Process In GetObject("winmgmts:").ExecQuery("Select * from Win32_Process")
i = i + 1
If Process.Caption Like "*" & proc & "*" Then
Process.Terminate
End If
Next
End Sub
Выдает итоговый отчет
Конечно, в коде заполнения источника t3_Sborka можно предусмотреть и заголовки, и поля итогов. Простор широкий, а получаемый результат, думаю, окупит затраченные усилия.
Учимся работать с базами данных 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