2016-06-24 8 views
0

Ich bin eine Reihe von Schleifen für die Suche nach einer Tabelle Zeile für Zeile für Daten zu kodieren, und wenn es die richtigen Angaben innerhalb der Zeile trifft, wird es einen bestimmten Wert aus der Zeile ziehen und in einer Zelle, die ich will in einer separaten Tabelle in einem anderen Diagramm. Ich bekomme den Fehler, dass es ein "Next" ohne ein "For" gibt, aber es gibt (es sei denn, ich vermisse etwas völlig). Es hat auch die obere Zeile am oberen Rand hervorgehoben (Ich versuche, dies als ein Makro auszuführen). Lass mich wissen, wo ich hier falsch liege, danke!Loop Syntax Probleme

Option Explicit 

Sub GraphLoop() 

Dim i, g, row, color, roundcount, round, materialcount, material As Long 
Dim chartdatacol, chartdatarow As Long 




Worksheets("Chart Data").Range("C6:DR10000").Value = "" 

     roundcount = 1 
     materialcount = 1 
     color = 1 
     round = 1 
     material = 1 
     chartdatacol = 3 
     chartdatarow = 6 
     i = 4 

For chartdatacol = 3 To Worksheets("Running Avg Log").Cells(4, cols.Count).End(xlUp).row 

Do Until i = Worksheets("Running Avg Log").Cells(Rows.Count, "A").End(xlUp).row 


     g = 1 



     If Worksheets("Running Avg Log").Cells(i, 1).Value = Worksheets("Chart Data").Cells(chartdatarow, 2).Value _ 
      And Worksheets("Running Avg Log").Cells(i, 2).Value = round _ 
      And Worksheets("Running Avg Log").Cells(i, 3).Value = color _ 
      And Worksheets("Running Avg Log").Cells(i, 4).Value = material Then 

      row = chartdatarow 

      Worksheets("Chart Data").Cells(row, chartdatacol).Value = _ 
      Worksheets("Running Avg Log").Cells(i, 6 + Worksheets("Analysis").Range("C5").Value).Value 


      chartdatarow = chartdatarow + 1 
      i = 4 


     Else 

      i = i + 1 


     End If 



Loop 


    color = color + 1 

    ' loops through ten colors 
     If color > 10 Then 

      color = 1 

     End If 

    roundcount = roundcount + 1 
    materialcount = materialcount + 1 

    ' every ten columns, material changes, every 30 columns, it repeats 
     If materialcount = 11 Or 21 Then 

      material = material + 1 

     End If 

     If materialcount > 30 Then 

      materialcount = 1 
      material = 1 

    ' each round's 30 combos is 30 columns 
     If roundcount = 31 Then 

      round = round + 1 

     End If 


Next chartdatacol 




End Sub 
+0

Ist das zweite 'Dim' auf seine eigene Linie? –

+0

@MattCremeens ja –

Antwort

0

Sie links Wenn hier ein Ende aus:

If materialcount > 30 Then 

     materialcount = 1 
     material = 1 

' each round's 30 combos is 30 columns 

BTW, auf eine andere Korrektur vornehmen:

If materialcount = 11 Or 21 Then 

sein sollte:

If materialcount = 11 Or materialcount = 21 Then 
+0

Danke! Sah genau danach. Außerdem bekomme ich jetzt einen Fehler mit der Zeile "For chartdatacol = 3 ...". Ich dachte, das würde laufen, bis es die erste leere Zelle oder das Ende meiner Karte trifft. Wenn Sie eine Sekunde haben, ist da etwas merkwürdig falsch? –

+0

Ich nehme an, Sie wollten dies verwenden: Für chartdatacol = 3 Zu Arbeitsblättern ("Running Avg Log"). Zellen (4, Columns.Count) .End (xlToLeft) .Column aber ich kann falsch liegen. Sie cols.Count ist definitiv nicht das, wonach Sie suchen. –

+0

Sie haben Recht, danke! –

0

Sie hatte eine If ohne End If Wenn

Siehe Code unten geändert, ich mit ********* den Ort markiert Sie das Ende fehlten:

Option Explicit 
Dim i, g, row, color, roundcount, round, materialcount, material As Long 
Dim chartdatacol, chartdatarow          As Long 


Sub GraphLoop() 


Worksheets("Chart Data").Range("C6:DR10000").Value = "" 

    roundcount = 1 
    materialcount = 1 
    color = 1 
    round = 1 
    material = 1 
    chartdatacol = 3 
    chartdatarow = 6 
    i = 4 

    For chartdatacol = 3 To Worksheets("Running Avg Log").Cells(4, Columns.Count).End(xlUp).row 

     Do Until i = Worksheets("Running Avg Log").Cells(Rows.Count, "A").End(xlUp).row 
      g = 1 
      If Worksheets("Running Avg Log").Cells(i, 1).Value = Worksheets("Chart Data").Cells(chartdatarow, 2).Value _ 
       And Worksheets("Running Avg Log").Cells(i, 2).Value = round _ 
       And Worksheets("Running Avg Log").Cells(i, 3).Value = color _ 
       And Worksheets("Running Avg Log").Cells(i, 4).Value = material Then 

       row = chartdatarow 

       Worksheets("Chart Data").Cells(row, chartdatacol).Value = _ 
       Worksheets("Running Avg Log").Cells(i, 6 + Worksheets("Analysis").Range("C5").Value).Value 
       chartdatarow = chartdatarow + 1 
       i = 4 
      Else 
       i = i + 1 
      End If 
     Loop 

     color = color + 1 

     ' loops through ten colors 
     If color > 10 Then 
      color = 1 
     End If 

     roundcount = roundcount + 1 
     materialcount = materialcount + 1 

     ' every ten columns, material changes, every 30 columns, it repeats 
     If materialcount = 11 Or 21 Then 
      material = material + 1 
     End If 

     If materialcount > 30 Then 
      materialcount = 1 
      material = 1 
      ' each round's 30 combos is 30 columns 
      If roundcount = 31 Then 
       round = round + 1 
      ' **** YOU WERE MISSING the End If here *** 
      End If 
     End If 
    Next chartdatacol 

End Sub