用于导出到Excel的MS Access宏达到65k记录的限制

时间:2015-04-23 11:15:47

标签: ms-access ms-access-2007

我有一个宏(使用宏向导创建),它运行许多查询,然后输出一个表到excel。该表具有超过65,000个记录限制,用于导出格式化表。如何在宏中没有格式化的情况下导出表格?这是我运行宏后收到的错误。

enter image description here

2 个答案:

答案 0 :(得分:0)

我知道您正在使用access vba导出记录,但您是否考虑过使用数据链接来查询excel并使用access vba打开excel文件并刷新数据表?这肯定会消除最大行的任何问题,并且不应该由于导出大小而导致任何失败问题。如果您需要有关如何操作的更多信息,请告知我们,我将在此处添加更多信息。

答案 1 :(得分:0)

以下是Anthony Griggs要求的代码。但它是一个VBA解决方案,而不是宏解决方案,因此不能直接响应发布的问题。这就是我解决问题的方法,并且已经成功地在生产中使用了很长时间。

请务必将引用添加到" Microsoft ActiveX Data Objects 2.8 Library" (或者您当前的版本)以及" Microsoft Excel 12.0对象库" (或者您当前的版本)在使用此代码之前。保存更改和最后退出是至关重要的,否则它会在后台打开Excel,您必须通过任务管理器终止。

    Dim rs As New ADODB.Recordset

    Dim xl As New Excel.Application
    Dim xlWb As Excel.Workbook
    Dim xlRange As Excel.Range

    xl.Visible = False
    xl.ScreenUpdating = False

    vcurfilename = "MyFilename.XLSX”

    Set xlWb = xl.Workbooks.Open(vcurfilename, 0, False, 5, "password", "password")

    rs.Open "Select * from qryMyAccessQuery", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
    Set xlRange = xlWb.Worksheets("MyExcelSheetName").Range("A1").Offset(1, 0)
    xlWb.Sheets("MyExcelSheetName ").Range("a2:bq25000").ClearContents
    xlRange.Cells.CopyFromRecordset rs

    xl.Range("Table1").Sort key1:=xl.Range("Table1[[#All],[MyColumnName]]"), _
    order1:=xlAscending, Header:=xlYes

    On Error Resume Next
    xl.Range("table1").Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    On Error GoTo 0
    rs.Close

    xl.Range("table1").ListObject.HeaderRowRange.Find("MyColumnName1").EntireColumn.NumberFormat = "dd-MMM-yy"
    xl.Range("table1").ListObject.HeaderRowRange.Find("MyColumnName2").EntireColumn.NumberFormat = "dd-MMM-yy"
    xl.Range("table1").ListObject.HeaderRowRange.Find("MyColumnName3").EntireColumn.NumberFormat = "dd-MMM-yy"

    xlWb.Close SaveChanges:=True
    xl.Quit
    DoEvents