Excel VBA范围';删除';方法随机失败

Excel VBA范围';删除';方法随机失败,excel,vba,Excel,Vba,背景 我有一段VBA代码,它根据特定列(一个“控制范围”)中每行上的值是真还是假删除工作表上的多行。作为主循环切换的工作表(高于此函数的级别),在多个工作表和工作簿中循环 这在Excel 2013和2016中使用 自然地,代码搜索匹配的行并建立一个范围对象,只有循环结束后,该范围才会被删除 代码提取 我无法发送实际工作簿的副本,因为它太大、太复杂,而且我没有时间解释它是如何工作的——而且它是保密的 我在下面列出了失败的关键代码的摘录(命令以粗体显示失败) 问题/问题 此代码有时有效,有时无效 我

背景

我有一段VBA代码,它根据特定列(一个“控制范围”)中每行上的值是真还是假删除工作表上的多行。作为主循环切换的工作表(高于此函数的级别),在多个工作表和工作簿中循环

这在Excel 2013和2016中使用

自然地,代码搜索匹配的行并建立一个范围对象,只有循环结束后,该范围才会被删除

代码提取

我无法发送实际工作簿的副本,因为它太大、太复杂,而且我没有时间解释它是如何工作的——而且它是保密的

我在下面列出了失败的关键代码的摘录(命令以粗体显示失败)

问题/问题

此代码有时有效,有时无效

我在代码中进行了各种调试,可以确认代码始终找到目标行(“上面摘录中的rngRowsToDelete”),并且始终正确地构建范围对象

然而。。。有时delete可以工作,有时不可以——即使它在同一个工作表上运行。没有生成错误


有没有人遇到过类似的情况/有什么想法?

你所说的删除有时不起作用是什么意思-到底发生了什么(或没有发生)?…并且始终正确地建立范围对象。将行
更改为
如果不是rngRowsToDelete则为rngRowsToDelete.Delete
更改为
如果不是rngRowsToDelete则为rngRowsToDelete.Delete Else Msgbox“这次未找到范围”
现在每次它不删除任何内容时,是否会看到消息框?是@SJR。。。我不断恶意的横向阅读…SJR:我的意思是这一行不会被删除。没有生成任何错误。SiddharthRout:此代码作为静默进程运行(没有对用户的反馈)。此包含此代码的子系统正在循环中运行多次,以便删除多个不同工作表上的行,这些行在每个工作表的指定列中标记为TRUE。正如我所说,从某些工作簿中的某些工作表中删除工作表,而不是从其他工作表中删除工作表。如果对相同的“输入”工作簿和工作表重新执行主流程,您可能会得到不同的结果(即,行现在可能被删除),1。请试试我的建议。此外,您是否在代码上方的任何位置有
错误恢复下一步
?您所说的有时删除不起作用是什么意思?到底发生了什么(或没有发生)?…并且始终正确地建立范围对象。将行
更改为
如果不是rngRowsToDelete则为rngRowsToDelete.Delete
更改为
如果不是rngRowsToDelete则为rngRowsToDelete.Delete Else Msgbox“这次未找到范围”
现在每次它不删除任何内容时,是否会看到消息框?是@SJR。。。我不断恶意的横向阅读…SJR:我的意思是这一行不会被删除。没有生成任何错误。SiddharthRout:此代码作为静默进程运行(没有对用户的反馈)。此包含此代码的子系统正在循环中运行多次,以便删除多个不同工作表上的行,这些行在每个工作表的指定列中标记为TRUE。正如我所说,从某些工作簿中的某些工作表中删除工作表,而不是从其他工作表中删除工作表。如果对相同的“输入”工作簿和工作表重新执行主流程,您可能会得到不同的结果(即,行现在可能被删除),1。请试试我的建议。您是否在代码上方的任何位置都有“下一步继续执行错误时的
    ' 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