EXCEL

[엑셀_VBA] (2/2)유저 폼(User Form)으로 셀에 값 입력

엑셀복지사 2021. 10. 5. 14:35

이전 포스팅에서 이어집니다.
https://excel-welfare.tistory.com/9


4. 셀에 값 입력하기

유저 폼에 명령 단추로 '저장'과 '취소' 버튼을 만들어줍니다.
버튼의 이름은 각각 cmd_save, cmd_cancel로 설정하겠습니다.


1) 저장 버튼 설정

저장 버튼을 더블 클릭 해주면 코드를 입력하는 창이 나옵니다.


1-1) 값 입력 위치 지정

유저 폼에 기입된 값을 엑셀 시트에 입력하기 위해 위치를 지정해주어야 합니다.
지정 방법은 다양하지만, 여기에서는 CurrentRegion.Rows.Count를 활용한 방법을 소개해드리겠습니다.

먼저, 엑셀 시트에서 값을 입력하고자 하는 테이블의 머리말 행 첫 번째 셀(B4)을 기준점으로 잡아줍니다.
(코드 작성의 편의를 위해 Standard라는 변수 명을 지정했는데, 이 부분은 편의에 맞게 수정하시면 됩니다.)

 Dim Standard As Range Set Standard = Range("B4")


다음으로, 해당 테이블의 행 개수를 카운트합니다. 앞서 지정한 Standard를 활용해줍니다.
CurrentRegion은 Ctrl+A를 누른 것과 같은 범위를 잡아줍니다.
따라서 현재 시점으로는 데이터가 없고 머리말 행만 있으니 Rcount는 1이 되겠죠.

 Dim Rcount As Integer Rcount = Standard.CurrentRegion.ROWS.Count


그 다음, 입력하고자 하는 셀의 위치를 지정해줍니다.
앞서 설정한 Standard와 Rcount 변수를 활용해줍니다.
Standard 셀에서 Rcount만큼 아래로 이동하면 입력하고자 하는 셀의 위치가 됩니다.

 Dim EnterCell As Range Set EnterCell = Standard.Offset(Rcount, 0)


마지막으로, 값이 누적될 경우 셀 서식(테두리, 폰트 등)을 동일하게 만들어주기 위하여, 첫 행의 셀 서식을 복사해서 EnterCell에 붙여넣어 줍니다.
(CutCopyMode를 False로 변경해주어야 클립보드에 데이터를 남기지 않습니다.)

 Range("B5:E5").Copy EnterCell.PasteSpecial xlPasteFormats Application.CutCopyMode = False

1-2) 이름 저장

입력 셀 위치까지 지정이 완료되었으니, 다음부터는 비교적 수월합니다.
이름은 다음과 같이 코드를 작성하여 저장이 가능합니다.

 EnterCell.Offset(0, 0) = txt_name

1-3) 성별 저장

성별은 If 함수를 사용해야 합니다.
'남(opt_men)'을 체크(True)했으면 '남'을, '여(opt_women)'를 체크(True)했으면 '여'를 저장해야 하죠.
코드는 다음과 같습니다.
(If는 End If와 함께 사용해야 하지만, True일 경우의 조건만 입력할 때에는 아래처럼 한 줄에 작성 가능합니다.)

 If opt_men = True Then EnterCell.Offset(0, 1) = opt_men.Caption If opt_women = True Then EnterCell.Offset(0, 1) = opt_women.Caption

1-4) 나이 저장

나이는 이름 저장 방식과 같습니다.

 EnterCell.Offset(0, 2) = cmb_age

1-5) 선호 저장

체크박스는 조금 까다롭습니다.
방법은 여러 가지이지만, 이번에는 단순 나열 방식으로 설명하겠습니다.
체크된 박스는 값&공백1칸 형태로 Favor라는 변수에 누적하여 저장하고, 마지막 공백 삭제를 위해 Trim을 사용합니다.
(Trim = 값의 첫 글자 또는 마지막 글자가 공백이면, 해당 공백을 삭제)

 Dim Favor As String If CheckBox1 = True Then Favor = Favor & CheckBox1.Caption & " " If CheckBox2 = True Then Favor = Favor & CheckBox2.Caption & " " If CheckBox3 = True Then Favor = Favor & CheckBox3.Caption & " " If CheckBox4 = True Then Favor = Favor & CheckBox4.Caption & " " EnterCell.Offset(0, 3) = Trim(Favor)

1-6) 유저 폼 닫기

모든 값을 셀에 입력했으니 유저 폼을 닫는 명령어를 넣어줍니다.

Unload Me


2) 취소 버튼 설정

취소 버튼을 누르면 유저 폼이 닫히도록 설정합니다.
저장 버튼과 마찬가지로 취소 버튼을 더블 클릭하여 코드 창을 열고, 아래와 같이 입력해줍니다.

 Unload Me


3) '입력하기' 도형에 유저 폼 연동

맨 처음 만들었던 엑셀 시트의 '입력하기' 도형이 있습니다.
이 도형에서 [우클릭 > 매크로 지정 > 새로 만들기]를 클릭해주면 코드 입력 창이 나옵니다.
여기에 아래와 같이 입력해줍니다.
처음에 만든 유저 폼의 이름을 특별히 수정하지 않았기 때문에, 엑셀에서 자동으로 지정해준 UserForm1이라는 이름을 사용한 것입니다. 필요에 따라 해당 이름은 유저 폼의 '(이름)' 속성에서 변경 가능합니다.

UserForm1.Show


5. 완성

최종적으로 아래와 같은 형태의 결과물이 완성되었습니다.