
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 iProgress
global definiert ist, aber das können wir hier nicht sehen.
Und warum führen Sie DIM
Anweisungen innerhalb einer Schleife aus? Sie sollten sie nur einmal ausführen und außerdem Objektvariablen festlegen, nothing
sobald 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 iProgress
auf 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/TotalItemCount
gibt Ihnen den Fortschritt an.