Verschachtelt man jede Schleife 10 mal 10, erhält man über 1000 Schleifen

Verschachtelt man jede Schleife 10 mal 10, erhält man über 1000 Schleifen

Ich bin über dieses Problem wirklich sprachlos. Ich habe eine verschachtelte For-Next-Schleife, die über tausend Schleifen erzeugt. Das weiß ich, weil ich diesen Code gesehen habe:

'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

aber der Fortschrittsbalken zeigt oft bis zu 3300 % an.

Wie ist das überhaupt möglich?

Antwort1

Sie zeigen nicht den gesamten Code. Ich gehe beispielsweise davon aus, dass dies iProgressglobal definiert ist, aber das können wir hier nicht sehen.

Und warum führen Sie DIMAnweisungen innerhalb einer Schleife aus? Sie sollten sie nur einmal ausführen und außerdem Objektvariablen festlegen, nothingsobald Sie mit ihnen fertig sind. Wenn Sie das nicht tun, kann es unterwegs zu einigen unangenehmen Speicherproblemen kommen.

Um die konkrete Frage zu beantworten: Sie haben es iProgressauf einen Zähler eingestellt, nicht auf einen %-Wert.

Um den %-Wert zu erhalten, müssen Sie wissen, wie viele Elemente Sie durchlaufen werden, bevor Sie den Fortschrittsbalken starten. Sie benötigen dann den aktuellen Elementzähler und die Gesamtsumme. CurrentCount/TotalItemCountgibt Ihnen den Fortschritt an.

verwandte Informationen