2015-06-12 142 views
0

以下代碼在第一張紙上刪除太多,然後不循環到第二張紙?出現在.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

如果你不告訴自己想要用你的代碼實現什麼功能,我們怎麼知道什麼是不正確的?你能提供錯誤的文字嗎? – moffeltje

回答

0

你必須完全符合您的Range小號。 此問題一再出現(例如this)。

這是什麼意思?不要使用CellsRangeRowsColumns沒有指定他們屬於哪個Worksheet來,除非您特別想這樣做(即使在這種情況下,明確使用ActiveSheet提高了可讀性,並減少錯誤的機會,類似於使用Option Explicit) 。 例如,對於

sh.Rows(sh.<something>.Row & ":" & (sh.<something>.Row + 2)).Delete 

我假設的Range被刪除跨度從相關sh採取一些數字更換

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

注意1:在這種情況下,即使沒有限定Range s,代碼仍會繼續執行,錯誤可能不被注意,因爲它會產生有效的結果。在其他情況下,不完全限定Range S碼將拋出一個錯誤(例如,像sheet1.Range(Cells(...,當sheet1不是ActiveSheet)**

注2:你可以用ActiveCell工作,只有當Worksheet它是在ActiveSheet [MSDN]。

+0

您還需要記錄第一個找到的地址,並檢查您何時返回到該地址,否則Do ... Loop將繼續。 https://msdn.microsoft.com/en-us/library/office/ff839746.aspx –

+0

謝謝大家的問題和努力。我已經更新了一些代碼。它循環遍歷表單,但是當有2個AUTO.WHSE實例時,它只作用於第一個。 – user5003326

+0

不知道如何輸入此代碼,抱歉,新的堆棧。 [代碼]子deleteRows() 昏暗WS作爲工作表 上的錯誤繼續下一步 Application.ScreenUpdating =假 對於每個WS在ActiveWorkbook.Worksheets ws.Activate Cells.Find(什麼:= 「AUTO.WHSE。」,後:= ActiveCell,LOOKIN:= _ xlFormulas,注視:= xlPart,SearchOrder:= xlByRows,SearchDirection:= _ xlNext,MatchCase:=假,SearchFormat:= FALSE).Activate 行(ActiveCell.Row&「 :「&(ActiveCell.Row + 2))。Delete Next ws Application.ScreenUpdating = True End Sub [/ code] – user5003326