Verschachtelt für jede Schleife ergibt 10 mal 10 über 1000 Schleifen

0

Ich bin ernsthaft verblüfft von diesem Problem. Ich habe eine verschachtelte For-Next-Schleife, die über tausend Schleifen enthält, die ich aus dem folgenden Code kenne:

'find row ranges for department 1-10
    For i = 1 To 10 Step 1
        Dim tempRange As Range
        Set tempRange = GetRowRange(importsheet, DepColumn, i)
        'and iterate through the columns to insert them
        ' find row ranges for section
        If Not (importsheet.UsedRange.Find("afdeling_" & i) Is Nothing) Then
            Dim SecColumn
            Dim secRange As Range
            SecColumn = importsheet.UsedRange.Find("afdeling_" & i).column
            Set bCell = tempRange.Columns(SecColumn)
            tempRange.Sort Key1:=bCell, Order1:=xlAscending, Header:=xlYes
            For ix = 1 To 10 Step 1
                'check for a valid section column
                Set secRange = GetRowRange(tempRange, SecColumn, ix)
                totalposts = totalposts + IterateColumns(secRange, spgsheet, importsheet, debugsheet, year, month, week, Hospital, i, ix, varType, False)
                Progress
            Next ix
        Else
        totalposts = totalposts + IterateColumns(tempRange, spgsheet, importsheet, debugsheet, year, month, week, Hospital, i, 0, varType, False)
        End If
        Progress
    Next i

Meine Fortschrittsfunktion sieht folgendermaßen aus:

Function Progress()
iProgress = iProgress + 1
Application.StatusBar = Format(iProgress, "0%") & " Completed"
End Function

In der Fortschrittsanzeige werden jedoch häufig bis zu 3300% angezeigt.

Wie ist das überhaupt möglich?

user197546
quelle
1
1 = 100%, also 33 = 3300%
Larry
Sie sollten dies beim Stackoverflow besser nachfragen
brettdj
Es gibt keine Möglichkeit, wie dieser Code 1.000 Mal ausgeführt wird. Entweder haben Sie nicht den gesamten Code gepostet oder Ihre Debugging-Methoden sind fehlerhaft.
Ramhound

Antworten:

2

Sie zeigen nicht den gesamten Code an. Zum Beispiel nehme ich das an iProgress ist global definiert, aber das können wir hier nicht sehen.

Und warum machst du das? DIM Anweisungen innerhalb einer Schleife? Sie sollten sie nur einmal ausführen und auch Objektvariablen auf setzen nothing Sobald Sie mit ihnen fertig sind. Wenn Sie dies nicht tun, kann dies zu unangenehmen Speicherproblemen führen.

Um die spezifische Frage zu beantworten. Sie haben eingestellt iProgress ein Zähler sein, kein%.

Um% zu erhalten, müssen Sie wissen, über wie viele Elemente Sie iterieren, bevor Sie den Fortschrittsbalken starten. Sie benötigen dann den aktuellen Positionszähler und die Gesamtsumme. CurrentCount/TotalItemCount gibt dir den Fortschritt.

Julian Knight
quelle