엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하는 방법

엑셀(Excel)/VBA

엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하는 방법

 

환경: Microsoft Excel 2013

 

오늘은 VBA 폼을 잘 다루기 위한 연습 문제입니다. 구현할 예제는 셀에 있는 데이터들을 모두 텍스트 박스에 하나씩 넣는 것입니다. 그러니까 폼에 있는 모든 컨트롤을 일일이 지정하지 않고 반복문을 돌면서 한번에 제어하는 방법을 익히는 것이 목적입니다. 이전에 UserForm Controls 속성을 이용한 것과 달리 이번에는 컨트롤 Caption 명으로 제어하는 방법입니다.

 

먼저 [삽입] 메뉴 > [사용자 정의 폼]을 선택해서 새로운 Form 을 추가합니다.

엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하는 방법

 

다음은 시트에서 폼을 띄울 버튼을 만듭니다. 그리고 이벤트 함수에 UserForm6.Show 함수를 입력합니다.

 

Private Sub CommandButton1_Click()

    UserForm6.Show vbModeless

End Sub

엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하는 방법

 

폼은 다음과 같이 구성합니다. 시트에 있는 내용들을 가져와서 하나씩 담을 텍스트 박스들과 버튼을 추가합니다

엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하는 방법

 

버튼을 클릭했을 때 시트에 있는 내용을 가져와서 각 텍스트에 뿌리는 소스의 내용은 다음과 같습니다. 이 소스에서 핵심은 For 문을 돌면서 폼에 있는 텍스트 박스 컨트롤에 어떤 식으로 접근하느냐 입니다. Controls() 함수는 텍스트 박스의 Caption 명을 가지고 컨트롤 개체로 변환할 수 있습니다. 폼에 추가된 텍스트 박스의 Caption 명 들은 TextBox1, TextBox2, TextBox3 … 와 같이 지정되어 있어야겠죠.

 

Private Sub CommandButton1_Click()

 

    Dim rng As Range

    Dim cell As Range

    Dim i As Integer

   

    Set rng = ActiveSheet.Range("B2").CurrentRegion

   

    i = 1

    For Each cell In rng

        Controls("TextBox" & i).Value = cell.Value

        i = i + 1

    Next cell

 

End Sub

엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하는 방법

Posted by 녹두장군