我有一个vba代码,它使用数据表中的自动过滤器来识别第一列中具有“True”的记录并删除可见行。我的代码工作了几个月没有问题,但今天它停止工作并产生1004没有发现记录错误。问题是,我可以看到可见的行,如果我在调试模式下遍历代码,它工作正常。它是导致问题的wholerow.delete行。谁能帮我弄清楚是什么让它停止工作?
Public Class DB2RS
Public Shared Function SetDBCon( _
ByRef dbCon As OleDbConnection, _
ByRef Dts As Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptObjectModel, _
ByRef strError As String _
) As Boolean
答案 0 :(得分:0)
您删除以前的AutoFilter的方式对我来说很可疑。 Eben虽然过去“有效”,但可能取决于版本和其他情况。另外,不要忘记AutoFilter始终将第一行视为标题行,即使不是这样。所以你不应该删除自动过滤后的标题行。尝试用这种方式重写这段代码:
With Sheets("Master Data")
If .FilterMode Then .ShowAllData
If .AutoFilterMode Then .Cells.AutoFilter
With .Range("$A$1:$B" & lastRowall)
.AutoFilter Field:=1, Criteria1:="True"
'.offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
'^^^^^^^^^
' You can also delete directly, delete acts only on visible cells
.offset(1).EntireRow.Delete
.AutoFilter
End With
End With