2017-12-14 15 views
0

私が現在直面している問題は、コードが定義された範囲をループしないということです。ここでVBA(Excel)範囲をループできません

は私のコードです:

Private Sub Vergelijk_prijs_en_staffel_click() 

Dim xlRange As Range 
Dim xlRange2 As Range 
Dim xlCell As Range 
Dim xlCell2 As Range 
Dim xlSheet As Worksheet 
Dim xlSheet2 As Worksheet 
Dim ValueToFind 
Dim lastRow As Integer 

Set xlSheet2 = Sheets(1) 
Set xlRange2 = xlSheet2.Range("I6:I5715") 

For Each xlCell2 In xlRange2 

If ActiveCell.Row > 5715 Then Exit Sub 

ValueToFind = xlCell2.Value 

    If xlCell2.Value = ValueToFind Then 

     If Sheets("Tab 1 - Prijslijst").Range("DK" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("W" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DL" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("X" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DM" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("Y" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DN" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("Z" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DO" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AA" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DP" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AB" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DQ" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AC" & ActiveCell.Row).Value Then 
      If Sheets("Tab 1 - Prijslijst").Range("DR" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AD" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DS" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AE" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DT" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AF" & ActiveCell.Row).Value Then 
       If Sheets("Tab 1 - Prijslijst").Range("DU" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AG" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DV" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AH" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DW" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AI" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DX" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AJ" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DY" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AK" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("DZ" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AL" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("EA" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AM" & ActiveCell.Row).Value Then 
        If Sheets("Tab 1 - Prijslijst").Range("EB" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AN" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("EC" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AO" & ActiveCell.Row).Value And Sheets("Tab 1 - Prijslijst").Range("ED" & ActiveCell.Row).Value = Sheets("Tab 2 - Nieuwe prijzen").Range("AP" & ActiveCell.Row).Value Then 
         Sheets("Tab 3 - Prijslijst aangepast").Range("I" & ActiveCell.Row).Interior.ColorIndex = 15 
         xlCell2.Interior.ColorIndex = 15 
        Else 
         Call ntofourty(xlCell2) 
        End If 
       Else 
        Call ntofourty(xlCell2) 
       End If 
      Else 
       Call ntofourty(xlCell2) 
      End If 
     Else 
      Call ntofourty(xlCell2) 
     End If 

    Else 

    xlCell2.Interior.ColorIndex = 3 

    End If 

'Set xlSheet = Sheets(1) 
'Set xlRange = xlSheet.Range("I6:I5715") 

If ValueToFind = "" Then 
    xlCell2.Interior.ColorIndex = 45 
    Exit Sub 
End If 

Next xlCell2 

End Sub 

あなたが見ることが範囲内に次のセルに移動し、そのセル範囲や色を経由するので、最後Next xlCell2の行がそれを作る必要があります。しかし、今、コードが何をしているのかは、同じセルを何度も何度も色づけしています。

私は本当に助けていただきありがとうございます!

+0

ActiveCellを使用して停止してください!!!!それには理由が説明されるであろう数十の答えがあります。そして、それはあなたの現在の問題を避けたでしょう。 –

+0

こんにちは@PatrickHonorez、あなたの答えに感謝します。私はExcel VBAでかなり初心者です。 ActiveCellの使用を避けるために、正しい方向に私を指摘してください。 –

+0

@MauricevanDorstは、あなたのコードについてHarassed Dadがすでに言及していることに加えて、ここでの主な原因は、すべてのANDを使用した大量のIf文と、ActiveCells.Rowを参照し続けていることです。 xlCell2.rowに変更してください...あなたのコードが実際に何をすることになっているのか、いくつかの例を挙げてお聞きしたら、コードをクリーンアップするのを助けることができました.... – Xabier

答えて

0

あなたは(ループのセルがある)xlCell2を色付けしたい(常に最初の行である)rColourを着色している​​

EDIT:

だから私はと混乱しているの詳細を見てこのビットは、あなたもそうだと思います:-)

For Each xlCell2 In xlRange2 'what this does is SET the variable xlcell2 
'to each cell in the range xlrange2 

If ActiveCell.Row > 5715 Then Exit Sub 'this isn't needed because you defined the range 
to stop at row 5715 - it cannot exceed this. 

ValueToFind = xlCell2.Value 'ok, so each time through valuetofind = 
'the value in the current cell pointed to by xlcell2 

    If xlCell2.Value = ValueToFind Then 'so this is always true because valuetofind 
'changes at every row -so why have it? 
And then you have a bunch of if statements that look at the activecell - 
'but we have no idea what that is - the activecell could be any cell - it could even 
'be on a different spreadsheet! Did you mean the row that contains the cell that xlcell2 
'is pointing to? 
+0

こんにちは@おばあさん、 。私は、必要に応じてrColourの代わりにxlCell2を適用しようとしました。私は現在、私のコードの更新版への投稿を編集しましたが、私はまだ同じ問題を抱えています。 また、rColourは常に最初の行です。どうしてそれがいつも最初の行であるのかという答えを私に教えてもらえますか? –

関連する問題