2015-07-03 60 views
4

我有一個工作簿與許多工作表,並進入一些我需要輸入一個值,如果前面的單元格匹配給定的字符串。Excel迭代通過工作表

我的代碼適用於我需要的工作表,但當它到達一些不需要的工作表(其中也包含數據)時出錯。

調試器突出顯示的行是For Each r In Intersect (ActiveSheet.UsedRange, Range("F:F")我是一個VBA/Excel腳本編程的新手。對不起,如果這是非常明顯的,但我搜索了網站,找不到合適的答案,或者我只是沒有認出它。

Sub AllOnePool() 
    Dim myStr As String 
    Dim myPool As String 
    Dim sh As Worksheet 
    Dim xlCalc As XlCalculation 

    myStr = InputBox(Prompt:="Input the Target Serial Number: e.g. 93127") 
    myPool = InputBox(Prompt:="Input the Pool to Use: ") 

    For Each sh In ActiveWorkbook.Worksheets 
     sh.Activate 
     For Each r In Intersect(ActiveSheet.UsedRange, Range("F:F")) 
      If r.Text = myStr Then 
       r.Offset(0, 1) = myPool 
      End If 
     Next r 
    Next sh 

End Sub 
+1

真的切,但除非序列號始終是93127(這將提高另一組問題),那麼你的「即」應該是「例如」 http://www.quickanddirtytips.com/education/grammar/ie-versus-eg –

回答

4

你需要檢查2個區域相交:

Sub AllOnePool() 
    Dim myStr As String 
    Dim myPool As String 
    Dim sh As Worksheet 
    Dim cel As Range 
    Dim xIng As Range 

    myStr = InputBox(Prompt:="Input the Target Serial Number: i.e. 93127") 
    myPool = InputBox(Prompt:="Input the Pool to Use: ") 

    For Each sh In ActiveWorkbook.Worksheets 
     With sh 
      Set xIng = Intersect(.UsedRange, .Range("F:F")) 
      If Not xIng Is Nothing Then 
       For Each cel In xIng 
        If cel.Text = myStr Then cel.Offset(0, 1) = myPool 
       Next 
      End If 
     End With 
    Next 
End Sub 
+0

感謝保羅,但其餘表還有內容。 –

+0

我改變了交叉操作的驗證 - 它應該消除錯誤 –

+1

真棒,保羅。任何想法我做錯了什麼?或者它只是一個優秀的東西?再次感謝! –