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