2017-10-05 54 views
1

任何人都可以幫我嗎?我試圖讓我的代碼循環遍歷工作簿中的所有工作表。它完美適用於一個工作表,但我努力使其循環遍歷所有工作表對於i = 2到thisworkbook.worksheets.count通過工作簿中的所有工作表

Sub stringcheck() 

Dim MainString As String 
Dim SubString As String 
Dim Lastrow As Long, Lcount As Long 
Dim i As Integer, j As Integer 

SubString = "All Grps" 

Lastrow = ThisWorkbook.Worksheets("SalesChannelName").Range("A30000").End(xlUp).Row 


For i = 3 To Lastrow 
    MainString = Range("B" & i) 
     If InStr(MainString, SubString) <> 0 Then 
      Rows(Range("A" & i).Row + 1 & ":" & Range("A" & i).Row + 2).Insert 
     End If 
Next i 

End Sub 

回答

0

要通過所有工作表循環您的代碼,請使用下面的代碼。

Sub stringcheck() 

Dim MainString As String 
Dim SubString As String 
Dim Lastrow As Long, Lcount As Long 
Dim i As Integer, j As Integer 
Dim ws As Worksheet 

For Each ws In ActiveWorkbook.Worksheets 
ws.Activate 
SubString = "All Grps" 

Lastrow = ActiveSheet.Range("A30000").End(xlUp).Row 


For i = 3 To Lastrow 
    MainString = Range("B" & i) 
     If InStr(MainString, SubString) <> 0 Then 
      Rows(Range("A" & i).Row + 1 & ":" & Range("A" & i).Row + 2).Insert 
     End If 
Next i 
Next ws 
End Sub 
+0

謝謝你,但對LASTROW = thisworkbook.worksheets( 「Saleschannelname」)的範圍( 「A30000」)的東西。最終(xlup ).row,它指定另一個工作表中的最後一個單元格。我估計會導致錯誤 –

0

你可以試試這個...

Sub stringcheck() 
    Dim ws As Worksheet 
    Dim MainString As String 
    Dim SubString As String 
    Dim Lastrow As Long, Lcount As Long 
    Dim i As Integer, j As Integer 

    Application.ScreenUpdating = False 

    SubString = "All Grps" 

    For Each ws In ActiveWorkbook.Worksheets 
     Lastrow = ws.Cells(Rows.Count, 1).End(xlUp).Row 
     For i = Lastrow To 3 Step -1 
      MainString = ws.Range("B" & i) 
      If InStr(MainString, SubString) <> 0 Then 
       ws.Range("A" & i + 1).Resize(2).EntireRow.Insert 
      End If 
     Next i 
    Next ws 
    Application.ScreenUpdating = True 
End Sub 
+0

謝謝。這是一個非常有創意的方式,在其中更改代碼並使其遍歷所有頁面:) –

+0

@KokoEtokebe不客氣!如果這照顧你的原始問題,請花一點時間接受答案,將你的問題標記爲已解決。 :) – sktneer

相關問題