Доступ к открытому запросу в Excel превосходит существующие данные

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

У меня уже есть код VBA внутри базы данных Access, который открывает запрос и записывает его в Excel-файл на правом листе. Тем не менее, он работает, когда я помещаю статический диапазон для вставки, поэтому он фактически просто перезаписывает диапазон, который я говорю:

Dim rst As DAO.Recordset Dim ApXL As Object Dim xlWBk As Object Dim xlWSh As Object Set rst = CurrentDb.OpenRecordset("Query name") Set ApXL = CreateObject("Excel.Application") ApXL.Application.ScreenUpdating = False ApXL.Visible = True Set xlWBk = ApXL.Workbooks.Open("C:\blabla.xlsm", True, False) Set xlWSh = xlWBk.Worksheets(1) xlWSh.Activate xlWSh.range("A1341").CopyFromRecordset rst xlWBk.Save xlWBk.Close False ApXL.Quit rst.Close Set rst = Nothing 

Обратите внимание на xlWSh.range («A1341»). CopyFromRecordset сначала. Он просто вставляет запрос из этой строки, потому что я знаю, что это первая пустая строка.

Я уже пробовал много других кодов, но всегда получаю ошибки:

 TheLastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row => Error 424: Object required Dim MyRange As range Dim lngLastRow As Long Set MyRange = xlWSh.range(strColum & "1") lngLastRow = xlWSh.Cells(65536, MyRange.Column).End(xlUp).Row => Compilation-error on Dim MyRange As range: user-defined type not defined Dim MyRange As Object Dim lngLastRow As Long Set MyRange = xlWSh.range(strColum & "1") lngLastRow = xlWSh.Cells(65536, MyRange.Column).End(xlUp).Row => Error 1004: Application-defined or object-defined error With xlWBk.Sheets("Sheetname") lastrow = .range("A" & .Rows.Count).End(xlUp).Row => Error 1004: Application-defined or object-defined error End With With xlWSh lastrow = .Cells.Find(What:="*", After:=.range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row => Error 9: Subscript out of range End With 

Поэтому я больше не знаю, что делать. Единственный другой вариант – прочитать весь лист в базе данных Access в виде списка или массива или таблицы, а затем сделать .Count или что-то, но вставка в lastRow + 1 или firstEmptyRow должна быть более быстрой, выполнимой и намного проще в программировании.

Заранее спасибо!

Проблема заключается в том, что Access ничего не знает о константах Excel, таких как xlUp , xlByRows и т. Д. ( xlByRows вы не добавите ссылку на библиотеку excel).

Для вас есть способы:

1) Перейдите к TOOLS-> REFERENCES и добавьте ссылку на библиотеку объектов Microsoft Excel 1x.0 (версия может отличаться)

введите описание изображения здесь

2) измените все константы excel на их значения (например, измените SearchOrder:=xlByRows на SearchOrder:=1 и т. Д.):

  • xlUp равно -4162
  • xlByRows eqals – 1
  • xlPrevious eqals to 2
  • xlCellTypeLastCell равно 11

Вот ссылка со значениями констант excel: xlConstants (или другой способ определения значений констант – использовать эту строку в EXCEL VBA : MsgBox xlCellTypeLastCell )

  • Несколько пользователей для пользовательской формы Excel VBA
  • Обновление приложения Excel Application.StatusBar в Access VBA
  • Блокировка таблицы доступа для предотвращения записи в определенное время
  • Поиск и удаление повторяющихся значений в MS Access
  • Форматирование строк в датах в mySQL
  • Экспорт листа Excel в Access через ADODB непоследовательное поведение
  • Макрос Excel, сохраненный в доступе
  • SQL для сравнения даты, проведенной в доступе к сегодняшней дате, не работающей
  • 3027 «Невозможно обновить. База данных или объект доступны только для чтения ». После использования таблицы make из excel
  • VBA - Вставка в две таблицы, где идентификатор из первой таблицы - это поле во втором
  • Подмножество подписок для MS Access Tables в MS Excel с VBA
  • Давайте будем гением компьютера.