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?
microsoft-excel
vba
user197546
quelle
quelle
Antworten:
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 setzennothing
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.quelle