2014-02-13 38 views
1

好的,所以我有一個帶有數據的Excel文件。此數據來自已從Access數據庫手動複製的查詢。由於每天都必須完成,所以我們希望自動完成。訪問插入在Excel下面打開的查詢在現有數據下面

我已經在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

問題是,Access不知道Excel常量的任何內容,如xlUp,xlByRows等等(直到您添加對excel庫的引用)。

有2種方式給你:

1)進入TOOLS->參考並添加引用Microsoft Excel中1x.0對象庫(版本可能會有所不同)

enter image description here

2)將所有excel常量更改爲它們的值(例如,將SearchOrder:=xlByRows更改爲SearchOrder:=1等等):

  • xlUp等於-4162
  • xlByRows eqals到1
  • xlPrevious eqals到2
  • xlCellTypeLastCell等於11

這裏是用Excel常量的值鏈接:xlConstants(或另一種方式來確定常量值 - 是在中使用此行EXCEL VBAMsgBox xlCellTypeLastCell

+1

非常感謝您的快速回復。 我對此代碼使用了第二個選項: 'lastrow = .Cells.Find(What:=「*」,After:=。range(「A1」),SearchOrder:= 1,SearchDirection:= 2).Row + 1' 而這個作品完美! – kvdw