2009-10-05 42 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