好的,所以我有一个包含数据的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应该更快,更可行并且更容易编程。
提前致谢!
答案 0 :(得分:1)
问题是Access对Excel常量一无所知,例如xlUp
,xlByRows
等等(直到您添加对excel库的引用)。
你有办法:
1)转到 TOOLS-> REFERENCES 并添加对 Microsoft Excel 1x.0对象库的引用(版本可能会有所不同)
2)将所有excel常量更改为其值(例如,将SearchOrder:=xlByRows
更改为SearchOrder:=1
,依此类推):
xlUp
等于-4162
xlByRows
eqals to 1
xlPrevious
eqals to 2
xlCellTypeLastCell
等于11
以下是与excel常量值的链接:xlConstants(或另一种确定常量值的方法 - 在 EXCEL VBA中使用此行:MsgBox xlCellTypeLastCell
)