在excel中访问插入已打开的查询下面现有的数据

好吧,我有一个Excel文件的数据。 此数据来自已从Access数据库手动复制的查询。 既然这个每天都要做,我们想自动完成。

在Access数据库中已经有了VBA代码,可以打开查询并将其写入右侧表格的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 rst。 它只是粘贴来自这一行的查询,因为我知道这是第一个空行。

我已经尝试了很多其他的代码,但我总是得到错误:

 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 

所以我不知道该怎么做。 唯一的办法是将整个表格作为List或者Array或者Table读入Access数据库,然后做一个.Count或者其他东西,但是插入到lastRow + 1或firstEmptyRow中应该更快,更方便,更容易编程。

提前致谢!

问题是,Access不知道任何关于Excel常量,如xlUpxlByRows等(直到您添加引用到Excel库)。

有你的方法:

1)转到工具 – >参考并添加引用到Microsoft Excel 1x.0对象库 (版本可能会有所不同)

在这里输入图像说明

2)将所有的Excel常量更改为它们的值(例如,将SearchOrder:=xlByRows更改为SearchOrder:=1等等):

  • xlUp等于-4162
  • xlByRows等于1
  • xlPrevious以前的等于2
  • xlCellTypeLastCell等于11

这里是与Excel常量的值链接: xlConstants (或另一种方式来确定常量值 – 是在EXCEL VBA中使用此行: MsgBox xlCellTypeLastCell