powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Экспорт из Access в Excel больших таблиц
49 сообщений из 49, показаны все 2 страниц
Экспорт из Access в Excel больших таблиц
    #36385091
chuka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть проблемы такова: необходим экспорт результирующего набора записей запроса с более чем 65000 записей из Access 2007 в Excel 2007.

Если это делать через возможности самого аксеса, т.е. клик на объекте запроса -> экспорт -> Excel и не ставить галочку "Экспортировать данные с макетом и форматированием.", то экспортируется таблица без проблем (более 65000 строк). Если галочку форматирования поставить - вылетает со словами, что невозможно скопировать в буфер более 65000 строк.

Но есть необходимость делать экспорт средствами VBA, пытаюсь делать так:

DoCmd.OutputTo acOutputQuery, "MyQuery_temp", acFormatXLSX, "234.xlsx"

При этом таблицы менее 65000 строк экспортируются с форматированием, а таблицы более 65000 строк не экспортируются с ошибкой такой же, как описано выше.

Вопрос: как грамотно экспортировать такие таблицы средствами VBA?
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #36385144
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chuka,
с Access 2007 и Excel 2007 не работал, но хочется верить, что CopyFromRecordset там остался.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #36385156
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а также TransferSpreadsheet
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #36385192
Volodymyr N.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё что было раньше там осталось. Исключение - исключительно программное формирование главного и контекстных меню. Что добавилось... Непревзойдённо отвратная встроенная справка, простейшие примеры использования, что были в разделах справки раньше, исчезли либо надежно глубоко "упрятаны"
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #36385293
chuka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде работает:)
Сделал следующим образом:
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #36385306
chuka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде работает:)
Сделал следующим образом:

Sub test()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim exl1 As Excel.Application
Dim sSQL As String

Set db = DBEngine.Workspaces(0).Databases(0)

sSQL = " ... "

Set rs = db.OpenRecordset(sSQL, DB_OPEN_DYNASET)

Set exl1 = New Excel.Application

exl1.Workbooks.Add

Set the_range = exl1.Worksheets("Лист1").Range("A1")

the_range.CopyFromRecordset rs

exl1.Application.Visible = True

End Sub


Осталось 2 вопроса:
1. Заметил, что какой бы диапазон в the_range не выбирал, рекордсет копируется весь. Так и должно быть? Правда вроде можно сдвинуть верхний левый угол области, в которую скопируется рекордсет если, например, задать диапазон Range("A2").

2. CopyFromRecordset копирует только данные полей, без шапки. Придется руками копировать рекордсет в диапазон Range("A2") (чтобы первая строка на листе пустая осталась), а потом туда шапку копировать, или есть более простой способ?
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #36385309
chuka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покритикуйте плз, я вообще в нужном направлении думаю?
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #36385318
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chuka,
у метода CopyFromRecordset 3 параметра, в том числе максимальное количество строк. Это к тому, что "рекордсет копируется весь". Посмотрите хелп.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #36385331
chuka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_world, да, вижу, по умолчанию копируется весь рекордсет. Непонятно только почему он копируется на весь лист, а не на диапазон the_range. Но это в общем детали, главное что в итоге работает, только с шапкой проблема :)
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #36385498
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chukaтолько с шапкой проблема :)
С шапкой тоже можно копифромрекордсетом. Только другим.
Создать свободный ADO-рекордсет, пройтись по полям основного рекорсета, заталкивая в свободный имена полей. Затем поместить адошный на первую строку. Ну и со второй строки писать основной.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #36385575
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_world
С шапкой тоже можно копифромрекордсетом. Только другим.
Создать свободный ADO-рекордсет, пройтись по полям основного рекорсета, заталкивая в свободный имена полей. Затем поместить адошный на первую строку. Как-то сложновато :)
Достаточно в цикле прочесть имена полей искомого рекордсета - поместив их строкой выше от ячейки вывода.

ЗЫ "диапазон the_range" - верхняя левая ячейка, с которой рекордсет выводится, а не диапазон вывода.

один из примеров
поиск вообще
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Экспорт из Access в Excel больших таблиц
    #38136607
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток,
делаю экспорт таблицы из акцесса в екзель, таблица большая >240000 строк, экспорт работает, но в итоге в екзель попадают только 65000 с чем то..., суть вопроса - как сделать экспорт в файл xlsx, который поддерживает более 65000 строк? (акс и екзель 2007).
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim rst As DAO.Recordset
Dim xlApp As Excel.Application
Dim xlWb As Excel.Workbook
Dim xlWs As Excel.Worksheet
    
    Set xlApp = New Excel.Application
    Set xlWb = xlApp.Workbooks.Add
    Set xlWs = xlWb.Worksheets(1)
            

Set rst = CurrentDb.OpenRecordset("tblAging", dbOpenTable)

    xlApp.Visible = True
    xlWs.Range("A1").CopyFromRecordset rst
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38136989
Офис 2007 не имею, но сильно удивлюсь, если подтвердится, что у екзель 2007 метод CopyFromRecordset заливает только 65635 строк за раз. Но даже если так - выход есть.
xlWs.Range("A1").CopyFromRecordset rst
xlWs.Range("A1").Offset(65000).CopyFromRecordset rst
xlWs.Range("A1").Offset(65000*2).CopyFromRecordset rst
xlWs.Range("A1").Offset(65000*3).CopyFromRecordset rst
И вы зальете все 240000.
Это лучше делать в цикле с проверкой rst.EOF.

В ёкселе есть еще одна хорошая штука - объект QueryTable (то же, что "Внешние данные"). Ему тоже можно присвоить Recordset, к тому же можно указать, что 1-я строка - имена полей.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38137011
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев ),

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

Alexander-80578,

Можно попробовать сначала сохранить книгу как *.xlsx (Так помоему), закрыть её, а потом снова открыть и уже добавлять рекордсет. Попробовать сам не могу, т.к. нет еселя 2010
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38137037
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть подозрение, что присоединена библиотека Excel 2003, а не 2007 ?

Можно попробовать заменить на позднее связывание. По умолчанию будет использована последняя версия
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim xlApp As Object
Dim xlWb As Object 
Dim xlWs As Object 
    
'Dim xlApp As Excel.Application
'Dim xlWb As Excel.Workbook
'Dim xlWs As Excel.Worksheet
    
'    Set xlApp = New Excel.Application
    Set xlApp = CreateObject("excel.application")
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38137039
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Access 2010 экспорт миллиона строк в Excel 2010 с помощью CopyFromRecordset, прошел гладко и полностью.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38137100
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_worldМожно попробовать заменить на позднее связывание.
Код: vbnet
1.
2.
'    Set xlApp = New Excel.Application
    Set xlApp = CreateObject("excel.application")

+1

Даже так, для надежности:
Код: vbnet
1.
    Set xlApp = CreateObject("Excel.Application.14")

(вроде такой номер для 2010-го)
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38137114
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwrqwr...
Даже так, для надежности:
Код: vbnet
1.
    Set xlApp = CreateObject("Excel.Application.14")

(вроде такой номер для 2010-го)
наверняка, утверждать - не возьмусь,
но очень может быть, что это ничего не даст ...
Почему создаётся 2003-й объект вместо 2007-го? Powerpoint.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38137139
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уже создавать новый файл то лучше так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Option Compare Database
Option Explicit
Sub test()
Dim sSql$, sFileName$, OutputPath$
OutputPath = "D:"
sFileName = "Test"
sSql = "SELECT * INTO [sh] IN '" & OutputPath & "\" & sFileName & ".xlsx' [Excel 12.0 Xml;] FROM tbl"
CurrentDb.Execute (sSql)
End Sub


...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38137430
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем откликнувшимся.
в итоге сделал так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
sFileName = CurrentProject.Path & "\" & "Blank.xlsx"

    Set xlApp = New Excel.Application
    Set xlWb = xlApp.Workbooks.Open(sFileName)
    Set xlWs = xlWb.Worksheets(1)


Set rst = CurrentDb.OpenRecordset("tblAging", dbOpenTable)

    xlApp.Visible = True
    xlWs.Range("A2").CopyFromRecordset rst

sFileName = CurrentProject.Path & "\" & "Aging_" & Format(Date, "dd.mm.yy") & "_" & Format(Time, "hh-mm") & ".xlsx"
xlWs.SaveAs sFileName


все работает и довольно быстро, но думаю еще испробывать CreateObject, так как не охота с файловм БД еще какие то бланки, шаблоны таскать.
Метод R Dmitry тоже прекрасно работает, но показалось, что дольше чем через рекордсет, время не засекал, поэтому утверждать не берусь, просто так показалось, вообще надо бы проверить, но файл на 30М больше получается почему то, если через запрос. Вообще в его методе смущает еще то, что я его не совсем понимаю, кто и как создает файл не понятно, есть вообще какое-нибудь описание того что стоит в квадратных скобках? Вот его метод экспорта:
Код: vbnet
1.
2.
3.
4.
5.
Dim sSql$, sFileName$, OutputPath$
OutputPath = "D:"
sFileName = "Test"
sSql = "SELECT * INTO [sh] IN '" & OutputPath & "\" & sFileName & ".xlsx' [Excel 12.0 Xml;] FROM tbl"
CurrentDb.Execute (sSql)
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38137450
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эта строка
Код: vbnet
1.
    Set xlApp = CreateObject("Excel.Application.14")

выдает ошибку - см. вложение
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38138122
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
даю полный код, подскажите плиз в чем ошибка, с CreateObject раньше не работал...
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim rst As DAO.Recordset
Dim sSql As String
Dim sFileName As String
Dim xlApp As Excel.Application
Dim xlWb As Excel.Workbook
Dim xlWs As Excel.Worksheet

    Set xlApp = CreateObject("Excel.Application.14")
    Set xlWb = xlApp.Workbooks.Add
    Set xlWs = xlWb.Worksheets(1)

Set rst = CurrentDb.OpenRecordset("tblAging", dbOpenTable)

    xlApp.Visible = True
    xlWs.Range("A2").CopyFromRecordset rst

sFileName = CurrentProject.Path & "\" & "Aging_" & Format(Date, "dd.mm.yy") & "_" & Format(Time, "hh-mm") & ".xlsx"
xlWs.SaveAs sFileName
...
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38138174
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander-80578все работает и довольно быстро, но думаю еще испробывать CreateObject, так как не охота с файловм БД еще какие то бланки, шаблоны таскать.Так и не таскай, положи в таблицу. И не вижу связи с CreateObject. Бланк этот ты и сам можешь делать. Я же написал выше.

Alexander-80578эта строка
Код: vbnet
1.
    Set xlApp = CreateObject("Excel.Application.14")


выдает ошибку - см. вложениеНаверное не зарегистрирован такой объект в системе.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38138912
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для офиса 2007, номер версии 12
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139110
ihamat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что плясать вокруг этих цифр. сделайте вложенные ифы или цикл. который без ошибки - тот и есть
пример с циклом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub Test()
Dim obj
    obj = GetObj()
End Sub

Function GetObj() As Object
Dim i&
    On Error Resume Next
    For i = 1 To 20 'не знаю какие бывают, поэтому написал такие значения
        Set GetObj = CreateObject("Excel.Application." & i)
        If Not (GetObj Is Nothing) Then
            Exit For
        End If
    Next
    If GetObj Is Nothing Then MsgBox "объект не создан"
End Function
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139116
ihamat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы: в javascript так делают (вложенными ифами) когда например создают объект для httpxtmlrequest. пробуют разные способы, свойственные разным браузерам. создался - на выход
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139136
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander-80578 но файл на 30М больше получается почему то, если через запрос.
То что медленнее в xml структуру пишутся данные это факт, для придания скорости можно писать в бинарный файл xlsb.
Размер файла также уменьшиться раза в два , а то и поболее.
В пропертях необходимо будет убрать xml структру БД и указать бинарное расширение:
Код: sql
1.
sSql = "SELECT * INTO [sh] IN '" & OutputPath & "\" & sFileName & ".xlsb' [Excel 12.0;] FROM tbl"


Alexander-80578 Вообще в его методе смущает еще то, что я его не совсем понимаю, кто и как создает файл не понятно,
есть вообще какое-нибудь описание того что стоит в квадратных скобках?
[sh]- имя таблицы (Листа ёкселя),
если в цикле менять имя листа и условия запроса, а путь к файлу и его имя не менять, тогда будет создана одна книга и нужное количество листов, с нужными данными. Если используется один и тот же набор данных, тогда целесообразней использовать фильтр рекордсета и средства автоматизации.
[Excel 12.0;]- проперти OLE DB Provider
----------
Как то так
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139145
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ihamat,

Код: vbnet
1.
Val(application.version)
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139154
ihamat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R Dmitry,

так это можно когда либо объект создан либо в самой апликации. или я не понял?
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139158
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ihamat,

Зачем в цикле пытаться создавать объекты ???
можно просто определить текущую версию используемого приложения офиса
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139165
ihamat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R Dmitry,

ааа... ну можно и что? но у меня например стоит два офиса. и в них установлены разные приложения ... ну вы поняли. ненадежно ) имхо
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139166
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ihamat,

Имхо Ваш метод создаст младшую из установленных версий
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139170
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
, вернее самую древнюю
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139175
ihamat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R Dmitry,

и пусть ), хотя можно step=-1 делать. а ваш может не создать никакой хотя возможность была
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #38139181
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ihamat,
пользуйся им на здоровье
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Экспорт из Access в Excel больших таблиц
    #40002701
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перечитывая пыльные справочники, хочу реанимировать данную тему. Попросили написать пользовательскую функцию, которая выводит таблицу/запрос на нужный (по имени) лист эксель. Казалось бы, тема обсосана уже неоднократно. Я собрал функцию, у меня на компьютере все прекрасно отрабатывает и экспортируется из аксесс в эксель. Копирую по простому, CopyFromRecordset.
У меня все норм на компе, на ноутбуке тоже все норм (на компе 10, на ноуте 7) Офис 2019 и 2010 соответственно.
А вот на компьютере человека рекордсет возвращается пустой , ничего не копируется, пишкт что добавил, но пустые клетки. Причем по рабочему моему примеру. Код достаточно прост (я просто дополнительно проверку туда повесил, открыт ли файл эксель перед экспортом, остальное все канонично.) Использую позднее связывание, метод CreateObject. Классика:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Public Function LalExcExp(tableName As String, excelPath As String, sheetName As String, cellTarget As String)
On Error GoTo err_description
Dim iFF As Integer, retval As Boolean
iFF = FreeFile
Open excelPath For Random Access Read Write Lock Read Write As #iFF
retval = (Err.Number <> 0)
Close #iFF
If retval = True Then
MsgBox "Файл кем то открыт, закройте excel: " & excelPath
Exit Function
Else
DoCmd.Hourglass True
Set objExcel = CreateObject("Excel.Application")
Set WB = objExcel.Workbooks.Open(excelPath)
Set WS = WB.Sheets(sheetName)
Set rs = CurrentDb.OpenRecordset(tableName)
objExcel.Visible = False
WS.Range(cellTarget).CopyFromRecordset rs
WB.Close True
Set WB = Nothing
objExcel.Quit
Set objExcel = Nothing
rs.Close
Set rs = Nothing
DoCmd.Hourglass False
MsgBox "Таблица успешно добавлена!"
End If
Exit Function
err_description: MsgBox Err.Description
End Function



Вызов элементарен:
Код: vbnet
1.
LalExcExp "з_счета", "C:\Users\user1\Desktop\тест.xls", "листок 2", "A1"




Каких то кривых библиотек не использую. В чем может быть проблема?)
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40002713
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,попробуйте
Код: vbnet
1.
objExcel.Visible = true 
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40002721
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,
пробовал уже) я тоже думал сначала ,что пустой рекордсет передается. Не, в рекордсете все норм, и функция на моем компе отрабатывает как надо.
на машине другого человека беда.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40002725
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В архиве два файла, один аксесс, другой эксель. Можно кинуть на рабочий стол ,открыть аксесс,нажать на кнопку экспорт и открыть файл эксель на листе "листок2".

У меня все экспортируется. Не могу понять почему лагает у другого компа.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40002744
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, это достаточно распространенная проблема, начиная с 1С. решается вышеописанным способом. не скажу что панацея, мне помогало.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40002745
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,
Спасибо, попробую. Имею в виду на компе другого человека. У него не тестил ещё, может прокатит.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40003336
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дожал универсальный код, без CopyFromRecordset, перебором. Работает на всех тестируемых компьютерах :

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
Public Function ExportExcelTwo(tableName As String, excelPath As String, sheetName As String, cellTarget As String)
On Error GoTo err_description
Dim iFF As Integer, retval As Boolean
iFF = FreeFile
On Error Resume Next
Open excelPath For Random Access Read Write Lock Read Write As #iFF
retval = (Err.Number <> 0)
Close #iFF
If retval = True Then
MsgBox "Файл кем то открыт, закройте excel: " & excelPath
Exit Function
Else
On Error GoTo err_description
Set rs = CurrentDb.OpenRecordset(tableName)
If rs.RecordCount = 0 Then
MsgBox "В выбираемой таблице/запросе 0 строк, вставлять нечего!"
rs.Close
Set rs = Nothing
Exit Function
Else
DoCmd.Hourglass True
Set objExcel = CreateObject("Excel.Application")
Set WB = objExcel.Workbooks.Open(excelPath)
Set WS = WB.Sheets(sheetName)
objExcel.Visible = False
row_id = WS.Range(cellTarget).row
col_id = WS.Range(cellTarget).Column
fieldCount = rs.Fields.Count
rs.MoveLast
rs.MoveFirst

Do Until rs.EOF
    For Each fld In rs.Fields
        If col_id = fieldCount Then
            WS.cells(row_id, col_id) = rs(col_id - 1)
                col_id = WS.Range(cellTarget).Column
                    rs.MoveNext
        Else
            WS.cells(row_id, col_id) = rs(col_id - 1)
                col_id = col_id + 1
        End If
    Next fld
        row_id = row_id + 1
    Loop
    
WB.Close True
Set WB = Nothing
objExcel.Quit
Set objExcel = Nothing
rs.Close
Set rs = Nothing
DoCmd.Hourglass False
MsgBox "Таблица успешно добавлена!"
  End If
End If
Exit Function
err_description: MsgBox Err.Description
End Function



Вызов функции:

Код: vbnet
1.
ExportExcelTwo "ваша_таблица_запрос", "C:\путь\тест.xls", "Лист 2", "A1"
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40003355
Фотография Лапух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

И ни кто даже спасибо не сказал.
Скажу я.
СПАСИБО
В копилку по любому закину.
Возможно пригодится, пока писал, даже уже предполагаю в где.
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40003379
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стесняюсь спросить:а ЧТО можно делать в EXCEL с таблицей > 65000 строк(не говоря о 240000)
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40003570
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku, да ты уже спрашивал - Экспорт из access в excel с помощью vba
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40003611
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург
sdku, да ты уже спрашивал - Экспорт из access в excel с помощью vba


рекурсия))
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40003647
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда не въезжал и сейчас не въезжаю-ЗАЧЕМ экспортировать в Ёксель таблицу которую он не "потянет"(хотя размеры листа позволяют это сделать)
Все это сильно напоминает "мысли" обезьяны: "а чё тут думать-трястинадо"
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40003662
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
Тогда не въезжал и сейчас не въезжаю
это не имеет значения
...
Рейтинг: 0 / 0
Экспорт из Access в Excel больших таблиц
    #40004958
andris2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я делаю это так.
Все тоже самое, как в примере Сергея, только добавлен прогресс-бар и данные выводятся в заранее подготовленный Template.
Для теста архив распаковать в корень диска C:\. Версия для Access 2000. Запускается в любой версии.
Я все же не понимаю, какая необходимость загонять в Excel такое количество записей?
Пример здесь
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Экспорт из Access в Excel больших таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]