Excel에서 사용자 양식으로 진행률 표시줄을 표시하는 방법

요약

완료하는 데 시간이 오래 걸리는 Microsoft Visual Basic for Applications 매크로가 있는 경우 매크로가 올바르게 진행되고 있음을 사용자에게 표시할 수 있습니다. 이 문서에서는 Microsoft Excel에서 사용자 양식을 사용하여 진행률 표시줄을 만드는 방법을 설명합니다.

추가 정보

Microsoft에서 제공하는 프로그래밍 예제는 예시를 위한 것일 뿐이며 이와 관련하여 명시적이거나 묵시적인 어떠한 보증도 하지 않습니다. 이는 상품성이나 특정 목적에 대한 적합성의 묵시적인 보증을 포함하며 이에 제한되지 않습니다. 이 문서에서는 예제에 사용되고 있는 프로그래밍 언어와 프로시저를 만들고 디버깅하는 데 사용되는 도구를 사용자가 잘 알고 있는 것으로 가정합니다. Microsoft 지원 엔지니어가 특정 프로시저의 기능을 설명하여 도움을 줄 수 있습니다. 사용자의 특정 요구 사항에 맞도록 예제를 수정하여 추가 기능을 제공하거나 프로시저를 구성하지는 않습니다.

사용자 양식 만들기

다음 예제에서 Visual Basic 서브루틴은 많은 범위의 셀을 난수로 채웁니다. 표시기는 매크로가 올바르게 실행되고 있음을 보여줍니다.

  1. Excel에서 새 통합 문서를 엽니다.

  2. Microsoft Office Excel 2003 및 이전 버전의 Excel에서 도구를 클릭하고 매크로를 가리킨 다음 Visual Basic Editor를 클릭합니다.

    Microsoft Office Excel 2007의 [개발자] 탭의 [코드] 그룹에서 Visual Basic을 클릭합니다.

    참고 리본에 개발자 탭을 표시하려면 다음 단계를 수행합니다.

    1. Excel 2007을 시작하고 Microsoft Office 단추를 클릭한 다음 Excel 옵션을 클릭합니다.
    2. Excel 옵션 대화 상자에서 [인기]를 클릭한 다음 [리본] 확인란에서 [개발자 표시] 탭을 클릭하여 선택합니다.
  3. 삽입 메뉴에서 UserForm을 클릭합니다.

  4. 사용자 양식에 레이블 컨트롤을 그립니다.

  5. 레이블 컨트롤의 다음 속성을 다음 값으로 변경합니다. | 속성| 값| |---------------|-----------------------------| | 캡션| 이제 업데이트 중입니다. 기다려주세요...| 참고속성 창이 표시되지 않으면 보기 메뉴에서 속성 창을 클릭합니다.

  6. 사용자 폼에 프레임 컨트롤을 그립니다.

  7. Frame 컨트롤의 다음 속성을 다음 값으로 변경합니다. | 속성 | 값| |---------|--------------------| | FrameProgress 이름을 지정합니다|

  8. 프레임 컨트롤에 레이블 컨트롤을 그립니다.

  9. 레이블 컨트롤의 다음 속성을 다음 값으로 변경합니다. | 속성| 값| |----------|---------------------------| | 이름 | LabelProgress| | BackColor |& H000000FF&| | SpecialEffect |fmSpecialEffectRaised|

매크로 코드 입력

  1. 사용자 양식을 두 번 클릭하여 사용자 양식의 코드 창을 엽니다.

  2. 모듈에서 UserForm_Activate 이벤트에 대해 다음 코드를 입력합니다.

    Private Sub UserForm_Activate()
        ' Set the width of the progress bar to 0.
        UserForm1.LabelProgress.Width = 0
    
    ' Call the main subroutine.
        Call Main
    End Sub
    
    
  3. [삽입] 메뉴에서 [모듈]을 클릭합니다.

  4. 모듈의 코드 창에서 다음 코드를 입력합니다.

    Sub ShowUserForm()
        UserForm1.Show
    End Sub
    
    Sub Main()
        Dim Counter As Integer
        Dim RowMax As Integer, ColMax As Integer
        Dim r As Integer, c As Integer
        Dim PctDone As Single
    
    Application.ScreenUpdating = False
        ' Initialize variables.
        Counter = 1
        RowMax = 100
        ColMax = 25
    
    ' Loop through cells.
        For r = 1 To RowMax
            For c = 1 To ColMax
                'Put a random number in a cell
                Cells(r, c) = Int(Rnd * 1000)
                Counter = Counter + 1
            Next c
    
    ' Update the percentage completed.
            PctDone = Counter / (RowMax * ColMax)
    
    ' Call subroutine that updates the progress bar.
            UpdateProgressBar PctDone
        Next r
        ' The task is finished, so unload the UserForm.
        Unload UserForm1
    End Sub
    
    Sub UpdateProgressBar(PctDone As Single)
        With UserForm1
    
    ' Update the Caption property of the Frame control.
            .FrameProgress.Caption = Format(PctDone, "0%")
    
    ' Widen the Label control.
            .LabelProgress.Width = PctDone * _
                (.FrameProgress.Width - 10)
        End With
    
    ' The DoEvents allows the UserForm to update.
        DoEvents
    End Sub
    
    
  5. Excel로 돌아갑니다.

  6. Excel 2003 및 이전 버전의 Excel에서는 도구 메뉴에서 매크로를 가리킨 다음 매크로를 클릭합니다.

    Excel 2007의 [개발자] 탭의 [코드] 그룹에서 [매크로]를 클릭합니다.

  7. 매크로 대화 상자에서 ShowUserForm을 클릭하여 선택한 다음 실행을 클릭합니다.

빨간색 진행률 표시줄이 있는 대화 상자가 나타납니다. 서브루틴이 워크시트의 셀을 채웁니다.

ShowUserForm 서브루틴에는 사용자 양식이 표시됩니다. 사용자 양식의 Activate 이벤트에 연결된 프로시저는 Main 서브루틴을 호출합니다. Main 서브루틴은 셀을 난수로 채웁니다. 또한 서브루틴은 사용자 양식에서 레이블 컨트롤을 업데이트하는 UpdateProgressBar 서브루틴을 호출합니다.

참고 이 기술을 사용하면 매크로가 의도한 작업을 완료하는 데 시간이 조금 더 걸립니다.