代码不循环通过工作表

时间:2015-06-12 14:33:19

标签: excel vba excel-vba loops

以下代码在第一张纸上删除太多,然后没有循环到第二张纸? .FindNext语句中出现错误。

Sub FindAndExecute3()
Dim Loc As Range
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
    With sh.UsedRange
        Set Loc = .Cells.Find(What:="AUTO.WHSE.")
        If Not Loc Is Nothing Then
          Do Until Loc Is Nothing
            Rows(ActiveCell.Row & ":" & (ActiveCell.Row + 2)).Delete
            Set Loc = .FindNext(Loc)
          Loop
        End If
    End With
    Set Loc = Nothing
Next
End Sub

1 个答案:

答案 0 :(得分:0)

您必须完全符合if (!function_exists('query_db_select') ) : function query_db_select($query, $where){ $query_params = array( ':var' => $where ); try { $stmt = $db->prepare($query); $stmt->execute($query_params); } catch (PDOException $ex){ } $myArray = $stmt->fetchAll(); return array("count" => count($myArray), "elements" => $myArray); } endif; 的资格。 此问题一次又一次出现(例如this)。

这是什么意思?请勿使用RangeCellsRangeRows而不指定Columns他们属于,除非你特别想要这样做(即使在这种情况下,明确使用Worksheet提高了可读性并减少了出错的可能性,类似于使用ActiveSheet)。 例如,替换

Option Explicit

Rows(ActiveCell.Row & ":" & (ActiveCell.Row + 2)).Delete

我假设要删除的sh.Rows(sh.<something>.Row & ":" & (sh.<something>.Row + 2)).Delete 跨度Range取自Row相关内容的数字。

注1 :在这种情况下,即使没有限定sh s,代码也会继续执行,错误可能会被忽视,因为它会产生有效的结果。在其他情况下,没有完全限定Range的代码会抛出错误(例如Rangesheet1.Range(Cells(...不是sheet1)。**

注意2 :只有当ActiveSheet所使用的ActiveCellWorksheet [MSDN]时,您才能使用ActiveSheet