访问在excel中打开查询,在现有数据下方

时间:2014-02-13 11:23:50

标签: excel vba ms-access access-vba

好的,所以我有一个包含数据的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应该更快,更可行并且更容易编程。

提前致谢!

1 个答案:

答案 0 :(得分:1)

问题是Access对Excel常量一无所知,例如xlUpxlByRows等等(直到您添加对excel库的引用)。

你有办法:

1)转到 TOOLS-> REFERENCES 并添加对 Microsoft Excel 1x.0对象库的引用(版本可能会有所不同)

enter image description here

2)将所有excel常量更改为其值(例如,将SearchOrder:=xlByRows更改为SearchOrder:=1,依此类推):

  • xlUp等于-4162
  • xlByRows eqals to 1
  • xlPrevious eqals to 2
  • xlCellTypeLastCell等于11

以下是与excel常量值的链接:xlConstants(或另一种确定常量值的方法 - 在 EXCEL VBA中使用此行MsgBox xlCellTypeLastCell