2017-03-31 3 views
-1

Ich habe derzeit den Code unten. Ich muss es von Zelle S1 zu Zelle S5000 und alles dazwischen laufen lassen. Was ich getan habe, war geschrieben Code für jede einzelne Zelle für 1 bis 5000, aber dann, als ich den Code in das Arbeitsblatt eingefügt habe, bekam ich die Nachricht "Kompilierfehler: Prozedur zu groß". Gibt es eine Problemumgehung, damit ich den Code für jede Zelle auf 5000 oder sogar mehr ausführen kann, wenn erforderlich?Kompilieren Fehler bei VBA-Code zu Long

Vielen Dank für Ihre Hilfe!

Sub CopyPriceOver() 
Application.ScreenUpdating = False 


If Range("S1") = 1 Then 
Range("S1").Select 
Range("S1").Select 
Call ScheduleCopyPriceOver 

ElseIf Range("S2") = 2 Then 
Range("L2").Select 
ActiveCell.FormulaR1C1 = "ready" 
Range("L1").Select 
Call ScheduleCopyPriceOver 

ElseIf Range("S3") = 3 Then 
Range("L3").Select 
ActiveCell.FormulaR1C1 = "ready" 
Range("L1").Select 
Call ScheduleCopyPriceOver 

. 
. 
. 
. 

ElseIf Range("S5000") = 5000 Then 
Range("5000").Select 
ActiveCell.FormulaR1C1 = "ready" 
Range("L1").Select 
Call ScheduleCopyPriceOver 


Else 


Call ScheduleCopyPriceOver 
End If 
+0

Verwenden Sie eine Schleife? Es ist nicht klar, was genau Sie erreichen möchten. – SJR

+1

schauen Sie sich die 1 bis 5000 an, dann sagen Sie 'if range (" s "& x) .value = Bereich (" s "& x) .row dann Bereich (" L "& x) .value =" ready "' und haben den Bereich als ein Argument in ScheduleCopyPriceOver, wenn die Auswahl von L1 etc. ist, dass diese Prozedur ActiveCell verwendet. –

+0

"Prozedur zu groß" bedeutet genau das: Die Prozedur ist so lächerlich groß, dass der Parser von VBA es nicht einmal nehmen wird. Schreiben Sie strukturierten Code, Prozeduren sollten nicht länger als ein Bildschirm voll sein, maximal. Vermeiden Sie das Schreiben von Makrorekorder-Code, der nutzlos ".Select" und ".Activate" überall verteilt und "ActiveCell" und "Selection" abarbeitet; lernen, Schleifen und richtigen Kontrollfluss zu verwenden. Durchsuchen Sie die [VBA-Dokumentation] (http://stackoverflow.com/documentation/vba/topics), um zu erfahren, wie das geht. –

Antwort

1

Sie können etwas wie das Folgende verwenden. Ich weiß jedoch nicht, was "ScheduleCopyPriceOver" ist, also entfernen Sie diese Zeile. UND in Ihrem ersten Beispiel wurde die Spalte "S" verwendet, aber Sie haben die Spalte "L" verwendet. Sollten sie alle 'L' ????

Dim lRow As Long 
Dim ws  As Worksheet 

Set ws = ThisWorkbook.Sheets("Sheet5") 
Application.ScreenUpdating = False 

For lRow = 1 To 5000 
    If ws.Cells(lRow, 12) = lRow Then 
     ws.Cells(lRow, 12).Select 
     'Call ScheduleCopyPriceOver 
    End If 
Next lRow 
+0

Auch wenn Ihre Reichweite variieren wird, schauen Sie bitte nach, wie Sie die zuletzt verwendete Zeile auf einem Blatt finden, und verweisen Sie dann auf "5000". –