
Я серьезно озадачен этой проблемой. У меня есть вложенный цикл for-next, который дает более тысячи циклов. Я знаю это, увидев этот код:
'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
Моя функция прогресса выглядит так:
Function Progress()
iProgress = iProgress + 1
Application.StatusBar = Format(iProgress, "0%") & " Completed"
End Function
но полоса прогресса часто показывает до 3300%.
Как это вообще возможно?
решение1
Вы не показываете весь код. Например, я предполагаю, iProgress
что thst глобально определен, но мы не можем увидеть этого здесь.
Кроме того, почему вы делаете DIM
операторы внутри цикла? Вы должны делать их только один раз, а также вы должны устанавливать переменные объекта, как nothing
только вы закончите с ними. Невыполнение этого требования, скорее всего, приведет к некоторым неприятным проблемам с памятью по ходу дела.
Чтобы ответить на конкретный вопрос. Вы установили iProgress
счетчик, а не %.
Чтобы получить %, вам нужно знать, сколько элементов вы будете перебирать до начала выполнения. Затем вам нужен текущий счетчик элементов и общее количество. CurrentCount/TotalItemCount
дает вам прогресс.