본문 바로가기
엑셀 (Excel)/엑셀 매크로 VBA

Excel 엑셀 매크로 Progress Bar 만들기

by ★√★ 2021. 3. 13.

안녕하세요, Davey 입니다. 오늘은 어제에 이어, 엑셀 매크로로, Progress Bar를 만들어 보도록 하겠습니다. 현재 진행되는 흐름에 대해서 가시적으로 보여줌으로써 사용자로 하여금 진행 상황을 참조 할 수 있는 기능입니다.

 

 매크로 작업을 하시면서, 항상 왜 오래 걸리지? 아니면, 지금 컴퓨터 멈춘 거 아니야? 다들, Macro 를 구현하고, 활용하면서, 이렇게 생각한 경험이 있을 것이다. 그래서, 이 부분에 대한, 해소를 위해, 준비한 것이 Progress Bar 입니다.

 

1) Progress Bar란?

- 일련의 Macro 작업을 하는 동안에, 작업 진행 과정 및 소요 시간을 알 수 있는, Gause Bar이다. 

  

다시 말하지만, 매크로의 작업이 많으면, 중간에 응답 없음 같은 현상이 일어서, 그냥 꺼버려서, 엑셀파일이 날리는, 불상사는 많은 분들이 경험하셨을 것입니다. Progress Bar를 통해서, 이 부분은 어느정도 해결이 되지 않을까 합니다. 

 

그리고, 제 개인적인 생각이긴 하지만, Progress 바가 있으면, 먼가 뽀대 나는거 같습니다. (혹시 저 혼자만의 생각인가요?! ;;) 하여튼, 본론으로 들어 가겠습니다. (컴퓨터가 꼬져서; 2번 튕겼습니다. ㅠ.ㅠ)

 

 

Step 1 - UserForm1 만들기 

- UserForm을 만들어야 한다. Macro의 코드를 구현하고, 시각화 할 수 있는, GUI 틀을 만드는 것으로, 이해하시면 됩니다. UserForm을 만드는 것은 의외로 간단합니다. Macro 구현 창을 열어, "폼" 메뉴에서, 새로 만들기를 통해, Form을 하나 만들면, 자동적으로, Form 이름이 UserForm1으로 됩니다. 즉, 2번째 Form은 UserForm2가 되겠죠? 

 

  1) UserForm1 관련 내용     

      1-1) Caption은, UserFor1 상단의 이름이니, 원하시는대로 변경 가능합니다. 

      1-2) ShowModal은, Form과 Code의 Coordination 관련 내용입니다.

            1) True : 다음 Code 진행 전에, Form의 응답을 기다림

            2) False :  다음 Code 진행 전에, Form의 응답을 기다리지 않음

                (말로 설명하긴 힘들지만, Code가 진행되지 않으면, 계속 Form은 변화 없이 있습니다.)

                 - 둘다 실행해보시길 추천 드립니다.

   

 

 

 2) Label 1 - Label 2의 색깔변화와 비교하기 위해서, 필요함. "바탕 바"

    2-1) Caption은, 다 지워 줍니다.

  

 

 

 

 

 3) Label 2 - Width의 변화로 색깔변화를 주어, Progress를 표현하는 Label

    3-1) Caption은, 다 지워 줍니다.

    3-2) BackColor는 Label1과 구별되는 색깔로 해주시면 됩니다.

    3-3) Width는 기억하셨다가, Code 적용할 때, Width 변화줄 때 이용합니다.

 

 

 

 

 4) Label 3 - Progress를 수치적으로 표현하기 위함. 

    4-1) BackStyple, Transparent으로 합니다. 한마디로, 투명하게 만든다는거죠.

    4-2) Caption은, 다 지워 줍니다

    4-3) TextAlign은, Center로 잡아주시면 됩니다.

 

 

 

Step 2 - 매크로 VBA Coding 본문 및 관련 주석

- 매크로를 실행할 모듈을 하나 만들고, 아래 Code을 입력하면, 아래 Snap Shot의 모양대로, 진행이 됩니다. 

  (인위적으로 값 입력을 한것이지, 마음대로 수정 가능)

 

 

 

 

 

=========================================================================

 

Sub ProgressBar1() 


 'UserForm1의 Label 2 는 색깔로(너비) 변화하는 Bar를 보여주는 것 
 'UserForm1의 Label 3 수치적으로 보여주는 것 
 '일단 초기값을 가진 Progress Bar가 등장 
  
 UserForm1.Label2.Width = 0 
 UserForm1.Label3 = "0 / 2000" 
 UserForm1.Show 
  
  
 'Progress를 인위적으로 만들어 주기 위해서, For문으로 구성 
  
  For i = 1 To 2000 
  
    Cells(i + 1, 1) = "TEST1-" & Trim(i) ' 활성화 된 Sheet에, 규칙을 가진 문자 입력 
     
      
     For a = 1 To 2000 
                        
           
           For c = 1 To 2000 
                   
            
           Next c 
                 
        
     Next a 
        
UserForm1.Label2.Width = Int(i / 2000 * 378) 
UserForm1.Label3 = Trim(i) & " / 2000" 
UserForm1.Repaint 
   
Next i 
  
UserForm1.Hide 
  
End Sub 

 

=========================================================================

 

지금까지 Progress Bar를 매크로로 어떻게 구현하는지에 대해서 포스팅을 하였습니다. 그래도 가시적으로 진행상황을 보여주니까 저 개인적으로는 도움이 되었던 거 같습니다. 다른 분들에게도 도움이 되었으면 하는 마음에 이만 마무리 하도록 하겠습니다. 현재 작업하는 매크로에, 섞어서 짜보시는 걸 추천 드립니다. 개인적인 생각이지만 뽀대 납니다. 

 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.] 

 

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab