Aninhados para cada loop 10 por 10 fornecem mais de 1000 loops

Aninhados para cada loop 10 por 10 fornecem mais de 1000 loops

Estou seriamente pasmo com esse problema, tenho um loop for-next aninhado que fornece mais de mil loops. Sei disso ao ver este código:

'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

Minha função de progresso é assim:

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

mas a barra de progresso geralmente mostra até 3300%.

Como isso é possível?

Responder1

Você não está mostrando todo o código. Por exemplo, presumo que iProgressseja definido globalmente, mas não podemos ver isso aqui.

Além disso, por que você está fazendo DIMinstruções dentro de um loop? Você deve fazê-los apenas uma vez e também deve definir variáveis ​​de objeto assim nothingque terminar de usá-las. Não fazer isso provavelmente resultará em alguns problemas desagradáveis ​​de memória ao longo do caminho.

Para responder à pergunta específica. Você configurou iProgresspara ser um contador e não um%.

Para obter a%, você precisa saber quantos itens irá iterar antes de iniciar a barra de progresso. Você então precisa do contador de itens atual e do total. CurrentCount/TotalItemCountdá-lhe o progresso.

informação relacionada