각 루프에 대해 10x10으로 중첩하면 1000개 이상의 루프가 제공됩니다.

각 루프에 대해 10x10으로 중첩하면 1000개 이상의 루프가 제공됩니다.

저는 이 문제 때문에 정말 어이가 없습니다. 천 개가 넘는 루프를 제공하는 중첩된 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

모든 코드가 표시되지는 않습니다. 예를 들어, thst가 전역적으로 정의되어 있다고 가정 iProgress하지만 여기서는 이를 볼 수 없습니다.

DIM또한 루프 내에서 명령문을 수행하는 이유는 무엇입니까 ? 이 작업은 한 번만 수행해야 하며 nothing작업이 끝나면 개체 변수를 로 설정해야 합니다 . 그렇게 하지 않으면 도중에 불쾌한 메모리 문제가 발생할 수 있습니다.

특정 질문에 대답합니다. iProgress%가 아닌 카운터로 설정되었습니다 .

%를 얻으려면 진행률 표시줄을 시작하기 전에 반복할 항목 수를 알아야 합니다. 그런 다음 현재 항목 카운터와 합계가 필요합니다. CurrentCount/TotalItemCount당신에게 진행 상황을 제공합니다.

관련 정보