背景
我有一段VBA代码,该代码会删除工作表上的多行,具体取决于每一行的值在特定列(“控制范围”)中为TRUE还是FALSE。工作表被切换为一个主循环(在此功能级别之上),该主循环在多个工作表和工作簿之间循环。
在Excel 2013和2016中使用
自然地,代码搜索匹配的行并建立一个范围对象,只有在循环结束后才删除该范围。
代码提取
我无法发送实际工作簿的副本,因为它太大,太复杂,而且除了机密之外,我没有时间解释它的工作原理。
我在下面列出了失败的关键代码的摘录(命令以粗体显示)。
' Build up a list of rows which are valid
For Each rngCurControlCell In rngSheetControlRange.Cells
If rngCurControlCell.Value = True Then
If rngRowsToDelete Is Nothing Then
Set rngRowsToDelete = rngCurControlCell.EntireRow
Else
Set rngRowsToDelete = Union(rngCurControlCell.EntireRow, rngRowsToDelete)
End If
End If 'rngCurControlCell.Value = True
Next rngCurControlCell
' Delete the rows
If Not rngRowsToDelete Is Nothing Then rngRowsToDelete.Delete
问题/问题
有时此代码有效,有时却无效。
我已经在代码中进行了各种调试,可以确认代码总是找到目标行(上面的摘录中为“ rngRowsToDelete”),并且始终正确地建立范围对象。
但是... ...有时删除有效,有时却无效-即使它针对同一工作表运行。没有错误产生。
有人遇到过类似情况/有什么想法吗?