2009-10-05 33 views
0

我已保存的QueryDef,我出口,一個過濾器,像這樣:可能會讀取最後執行querydef的RecordCount?

DoCmd.OutputTo acOutputQuery, tmpQueryName, acSpreadsheetTypeExcel9, appDirectory & "\" & tmpQueryName & ".xls", True 

我希望能夠在執行歷史表來存儲queryname,時間戳,過濾和總記錄執行的querydef的。在代碼中重新執行會很容易,但它可能是一個非常長的查詢,所以我不想重新執行它。是否有任何方法來讀取DoCmd.OutputTo的記錄數,或者從querydef本身讀取LastExecRecordCount,或者我可以用其他方法來完成此操作?

+0

首先,我不爲什麼你不使用DoCmd.TransferSpreadsheet,這似乎明白對我來說更容易使用。但是DoCmd操作在該行執行後沒有任何可訪問的屬性。所以,答案是您必須使用不同的輸出數據的方法,一種方法可以檢索記錄計數,或者執行@tbone建議的內容,然後在電子表格中檢查結果。但是,我不知道,如果手術沒有完成(如果可能的話,我不知道)是否可以依靠。 – 2009-10-06 03:18:13

+0

沒有特別的理由.... TransferSpreadsheet有什麼優點嗎? – tbone 2009-10-07 16:08:39

回答

0

在這個例子中,因爲對導出的Excel文件的完整路徑是已知的,可以這樣做:

Dim xl As Excel.Workbook 
    Set xl = GetObject(appDirectory & "\" & tmpQueryName & ".xls") 
    Dim lastRow As Integer 
    lastRow = xl.ActiveSheet.Cells(xl.ActiveSheet.Rows.Count, 1).End(xlUp).Row ' the spreadsheet row number of the last row that contains data 
    rowcount = lastRow - 1 'account for header row 
+0

@tbone:重新思考問題的好例子。但我想知道 - 是否有任何情況下電子表格可以創建,但它不會有源查詢檢索到的完整結果? – 2009-10-06 03:19:23

+0

只有當你超出excel rowcount限制時纔會出現。就我而言,我並不太擔心堅如磐石,但它可能是其他人的考慮因素。 – tbone 2009-10-07 16:09:44