Страницы: 1
RSS
Из Excel в Access с помощью VBA
 
Всем добрый день!
Появилась у меня необходимость загрузить данные из Excel в Access из-за большого объема данных, с которыми Excel справляется, но слишком туго.
Сейчас все выглядит так: макрос обрабатывает внешний Excel-файл, пишет в массив данные, а затем выгружает их в Excel уже в необходимом виде. Решил сделать то же самое, но выгружать данные в Access. И вот ковыряясь в литературе и на форумах, не смог найти способ выгрузки данных не просто с листа или с диапазона, а именно из массива. Вообще, возможно ли сделать такой SQL-запрос?
Сейчас делаю вот так:
Код
tName = "TestTable"
xlSheetName = ThisWorkbook.ActiveSheet.Name
xlFile = ThisWorkbook.Path & "\" & ActiveWorkbook.Name

Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & xlFile & "; Extended Properties=""Excel 12.0; Xml; HDR=Yes"""

Set dbcn = New ADODB.Connection
dbcn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & dbFile

'стираем старую таблицу, если она есть
On Error Resume Next
strSQL = "DROP TABLE [" & tName & "]"
dbcn.Execute strSQL
On Error GoTo 0

'создаем новую таблицу с нужными полями
strSQL = "CREATE TABLE [" & tName & "] ([num] integer, [date] date, [summ] long)"
dbcn.Execute strSQL

'вставляем данные в таблицу 
strSQL = "INSERT INTO [" & tName & "] SELECT * FROM [" & xlSheetName & "$]  IN '" & xlFile & "' [Excel 12.0; Xml; hdr=yes;]"
dbcn.Execute strSQL

cn.Close
dbcn.Close
    
Set cn = Nothing
Set dbcn = Nothing
но это, как я и говорил, - вставка данных с листа, а не из массива. Пытался крутить массив так и эдак - не вышло.
Подскажите, возможно ли в данном случае оперировать массивом и вообще в ту ли степь я пошел :)
Спасибо.
 
Доброе время суток.
Цитата
Ungrateful написал:
Вообще, возможно ли сделать такой SQL-запрос?
К массиву - нет.
Цитата
Ungrateful написал:
а именно из массива
Через Recordset.AddNew, например. Но с выгрузкой на лист и вставкой в таблицу базы Access, как у вас, будет быстрее.
Изменено: Андрей VG - 19.09.2019 16:39:05
 
Андрей VG, вы имеете в виду, сначала всю информацию из массива залить в Эксель, потом копировать в Эксесс?
Нашел вот такую штуку на днях, довольно быстро работает. Recordset-ом будет быстрее?
Код
xlFile = ThisWorkbook.Path & "\Файл.xlsm"
xlSheetName = "Лист1"
dbFile = ThisWorkbook.Path & "\Db1.accdb"
dbTableName = "Выгрузка"
    
Set acApp = CreateObject("Access.Application")
acApp.OpenCurrentDatabase dbFile
    
Set acDoCmd = acApp.DoCmd
acDoCmd.TransferSpreadsheet 0, 9, dbTableName, xlFile, True, xlSheetName & "!"
    
acApp.Quit

Почитал ссылку, спасибо, так тоже попробую.
Для меня это пока новая тема, раньше за грани Экселя не выходил )
Изменено: Ungrateful - 19.09.2019 17:25:32
Страницы: 1
Наверх