2016-10-14 7 views
0

Ich führe meinen Haupt-Sub, den ich alle 5 Schleifen für 10 Sekunden pausieren möchte. Mein Code scheint zu funktionieren, aber das Problem, mit dem ich konfrontiert bin, ist, dass meine Zählvariablen (nämlich j, i und n) ihre Zählungen zurücksetzen, nachdem das Pause-Sub ausgeführt wurde.Kontinuierliches Zählen über Subs

Gibt es eine effektive Möglichkeit, die aktuellen Zählergebnisse nach dem Ausführen des Subs, das innerhalb des Subs sitzt, zu übergeben?

Sub DataPopulation() 
Dim count As Integer 
Dim n As Integer 
Dim i As Integer 
Dim Total As Long 
Dim j As Integer 
i = 6 
n = 7 
Total = Cells(Rows.count, "A").End(xlUp).Row 

For j = 7 To Total 
If j Mod 5 = 0 Then 
    Call Application.OnTime(Now + TimeValue("00:00:10"), "DataPopulation") 
    Exit Sub 
End If 
Range("B" & i & ":" & "FO" & i).Select 
Selection.AutoFill Destination:=Range("B" & i & ":" & "FO"  &n ),Type:=xlFillDefault 
n = n + 1 
i = i + 1 
Next j 

End Sub 
+0

Sie 'static' verwenden können, Variablen zu deklarieren, die ihre vorherigen Werte – Jochen

+0

@Jochen 'erinnern' - Ich habe versucht, Static n As Integer, Static i As Integer, Static Gesamt As Integer, Static j As Integer deklariert am Anfang der DataPopulation Sub, aber das scheint immer noch die gleiche Wirkung haben –

+0

Sie müssen Ihre Programmlogik ein wenig ändern. Siehe meine Antwort unten. – Jochen

Antwort

0

die folgenden Versuchen. Wenn Sie eine Frage haben, fragen Sie einfach.

Sub DataPopulation() 
Static I As Integer 
Dim Total As Long 
Dim j As Integer 

Total = Cells(Rows.count, "A").End(xlUp).Row 
If I = 0 Or I >= Total Then I = 6 


For j = 1 To 10 
    If I >= Total Then Exit Sub 
    Range("B" & I & ":" & "FO" & I).AutoFill Destination:=Range("B" & I & ":" & "FO" & I + 1), Type:=xlFillDefault 
    I = I + 1 
Next j 
Call Application.OnTime(Now + TimeValue("00:00:10"), "DataPopulation") 
End Sub 
+0

Dieser Code scheint nichts zu tun. Vielleicht mache ich es falsch, aber der Code scheint keine Änderungen auf dem Blatt –

+0

Der Code automatisch Zeilen von 'B' bis 'FO' beginnend von Zeile 6, 10 Mal eine einzelne Zeile, pausiert 10 Sekunden, nächste 10 Zeilen – Jochen

+0

der 'Arbeitscode' ist der gleiche Autofilm, den Sie in Ihrem ursprünglichen Code – Jochen

0

Try Application.Wait Funktion, statt Application.OnTime zu verwenden.

Ihr Code würde wie folgt aussehen:

Sub DataPopulation() 
Dim count As Integer 
Dim n As Integer 
Dim i As Integer 
Dim Total As Long 
Dim j As Integer 
i = 6 
n = 7 
Total = Cells(Rows.count, "A").End(xlUp).Row 

For j = 7 To Total 
If j Mod 5 = 0 Then 
    Application.Wait(Now + TimeValue("00:00:10") 
    Exit Sub 
End If 
Range("B" & i & ":" & "FO" & i).Select 
Selection.AutoFill Destination:=Range("B" & i & ":" & "FO"  &n ),Type:=xlFillDefault 
n = n + 1 
i = i + 1 
Next j 

End Sub 
+0

Da ich dies mit Bloomberg verwende, gibt es ein bekanntes Problem der Datenanforderungen nicht mit Application.Wait soweit ich weiß –

+0

Application.wait stoppt alles in Excel. – Jochen

Verwandte Themen