循环中的自动filter首次缓慢运行,然后迅速运行?

事情要知道

  • 从这里的Crosspost: http ://www.mrexcel.com/forum/excel-questions/843474-visual-basic-applications-why-does-autofilter-loop-run-slowly-first-time-then-rapidly-after 。 HTML
  • Excel 2010
  • 第二个被过滤的文本文件与第一个文件类似 – 都使用Excel表格中除了一行以外的每一行,并覆盖了33列。 (第三个是小得多,我不惊讶看到它需要更短的时间)
  • 我有完整的macros可用,如果需要,但发布指导方针说,以尽量避免发布不必要的代码

我正在努力实现的是

  • 理解和解决为什么下面的代码段,自动filter,需要25分钟在第一个循环运行,但需要更less的时间(10秒)应该是一个类似的第二个循环,手动完成(也约10秒)

到目前为止我所做的是

  • 使用定时器观察代码段在循环的每次迭代中执行多长时间。
    • 第一次迭代需要25分钟
    • 第二次迭代需要10秒钟
    • 第三次迭代需要0秒(不奇怪,见上)

非常感谢您的帮助,请让我知道是否可以提供更有用的信息。 我试图尽可能简明但内容翔实。

Double1 = Now 'Delete Me 'Filter and delete dates before cutoff Long1 = Application.CountA(.Columns(8)) Set Range1 = .Range(.Cells(1, 8), .Cells(Long1, 8)) With Range1 .AutoFilter Field:=1, Criteria1:="<" & DateSerial(2012, 10, 1) 'DateSerial uses (Year, Month, Day) .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete End With Double2 = Now 'Delete Me 

只要您不介意将结果复制到新工作表中,使用ADO而不是自动filter应该会给您更一致的时间。

添加对“Microsoft ActiveX数据对象2.8库”的引用,然后尝试此代码(用相应的工作表和列名replace;请记住在SELECT语句中的工作表名称之后保留$符号):

 Dim cn As ADODB.Connection Set cn = New ADODB.Connection With cn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _ "Extended Properties=""Excel 12.0 Macro;HDR=YES;IMEX=1"";" .Open End With Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.Open "SELECT * FROM [Sheet1$] WHERE [DateToCheck] >= #10/01/2012#", cn Dim fld As ADODB.Field Dim i As Integer i = 0 With Worksheets("Sheet2") .UsedRange.ClearContents For Each fld In rs.Fields i = i + 1 .Cells(1, i).Value = fld.Name Next fld .Cells(2, 1).CopyFromRecordset rs .Cells.Columns.AutoFit End With rs.Close cn.Close