Aninhado para cada loop 10 por 10 fornece mais de 1000 loops

0

Eu estou seriamente confuso com esse problema, eu tenho um loop for-next aninhado que dá mais de mil loops Eu 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 aparece em 3300%.

Como isso é possível?

    
por user197546 25.02.2013 / 10:47

1 resposta

2

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

Além disso, por que você está fazendo DIM declarações dentro de um loop? Você deve fazer isso apenas uma vez e também deve definir variáveis de objeto como nothing depois de terminar com elas. Não fazer isso provavelmente resultará em alguns problemas de memória desagradáveis ao longo do caminho.

Para responder a pergunta específica. Você definiu iProgress para ser um contador e não um%.

Para obter o%, você precisa saber quantos itens será iterado antes de iniciar a barra de progresso. Você então precisa do contador de itens atual e do total. CurrentCount/TotalItemCount fornece o progresso.

    
por 25.02.2013 / 11:20