엑셀 VBA 는 사용자가 프로그램 화면을 구성할 수 있도록 사용자 정의 폼을 제공합니다. 여느 프로그래밍 언어처럼 폼 위에 컨트롤을 올려서 엑셀의 부족한 기능을 화면으로 만들어서 채울 수 있습니다. 오늘 만들어 볼 것은 이미지를 선택하고 셀에 추가하는 기능을 수행하는 사용자 정의 폼입니다.
* 실전 연습을 위한 작업파일이 필요하다면 아래 파일을 다운받으세요.
◎ 사용자 정의 폼 구성하기 |
▼ VBA 사용자 정의 폼을 만들기 위해 Visual Basic 편집 에디터를 띄웁니다. 개발 도구 > Visual Basic 리본 메뉴를 클릭합니다.
▼ Visual Basic 창에서 컨트롤을 올릴 폼을 추가하겠습니다. 왼쪽 상단에 사용자 정의 폼 메뉴를 클릭합니다.
▼ 화면에 나타난 도구 상자에서 명령 단추 컨트롤을 찾습니다. 그리고 마우스로 드래그해서 단추 2개를 폼에 추가합니다.
▼ 다음은 버튼의 이름을 변경하겠습니다. 버튼을 선택하고 오른쪽 마우스를 누릅니다. 그리고 속성 창을 띄웁니다.
▼ 속성창에서 Caption 항목의 이름을 수정합니다.
▼ 다음은 선택한 이미지의 경로를 표시할 텍스트 박스를 폼에 추가합니다. 텍스트 박스의 이름은 txtImagePath 로 변경합니다. 텍스트 박스 컨트롤에 붙인 이름은 소스에서 제어할 때 기억하기 쉬운 이름으로 변경했습니다.
▼ 마지막으로 선택한 이미지를 미리보기 할 컨트롤 박스를 폼에 추가합니다. 컨트롤에서 이미지 아이콘을 클릭한 다음 마우스로 드래그해서 추가합니다.
▼ 만약 컨트롤을 추가하는 도구 상자가 보이지 않는다면 보기 > 도구 상자 메뉴를 선택합니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 이미지 셀 크기에 자동으로 삽입하는 매크로 만들기 ▶ 엑셀 VBA - 사용자 정의 폼에 그림표시와 셀에 추가하기 ▶ 엑셀 VBA 카메라 기능을 매크로로 작성하기 ▶ 엑셀 Excel 이력서 사진 추가, 셀에 이미지 고정시키기 ▶ 엑셀 Excel 선택창을 이용해서 그림, 이미지를 숨기기 |
◎ 이미지 추가 기능 구현하기 |
▼ 지금까지 이미지를 선택하고 미리 보기할 폼 화면을 구성했습니다. 이제 기능을 추가할 차례입니다. 버튼을 클릭했을 때 원하는 동작을 할 수 있도록 함수를 만들고 연결하겠습니다. 버튼을 더블 클릭해 보세요. 바로 모듈 화면에 자동으로 이벤트 함수를 생성합니다.
▼ 함수에 들어가는 소스는 다음과 같습니다. Application 개체 함수인 Application.GetOpenFilename() 이용해서 파일 선택창을 띄웁니다. 화면에 나타난 창에서 이미지 파일을 좀 더 빠르게 선택할 수 있도록 filefilter 옵션을 추가했습니다. 사용자가 선택한 파일의 경로는 폼에 추가한 Image1.Picture 와 텍스트 박스인 txtImagePath 컨트롤에 입력합니다.
Private Sub CommandButton1_Click()
Dim path As Variant
path = Application.GetOpenFilename( _
filefilter:="그림파일,*.gif;*.jpg;*.bmp,전체파일,*.*", _
Title:="그림선택")
Me.txtImagePath = path
Me.Image1.Picture = LoadPicture(path)
End Sub
▼ 추가한 함수가 제대로 동작하는지 테스트하기 위해 폼을 실행합니다. 단축키는 F5 입니다.
▼ 실행한 폼 화면에서 이미지 선택 버튼을 눌러 보세요. 위에서 추가한 함수가 실행되면서 그림선택 팝업창이 뜰 겁니다.
▼ 팝업창에서 이미지를 선택하면 image 컨트롤과 텍스트 박스에 그림과 같이 화면에 나타납니다.
◎ 셀에 이미지 추가하기 |
▼ 다음은 셀에 이미지를 추가하는 함수를 만들어서 버튼과 연결하겠습니다. 소스는 아래와 같습니다. 함수는 지정한 이미지가 있는지 체크하고 선택한 셀의 크기에 맞게 이미지를 맞추는 기능을 수행합니다.
Private Sub CommandButton2_Click()
Dim num As Integer
If Me.txtImagePath = "" Then
MsgBox "이미지가 없습니다. 다시 확인해주세요", vbCritical
Exit Sub
End If
num = ActiveSheet.Pictures.Count
ActiveSheet.Pictures.Insert (Me.txtImagePath)
ActiveSheet.Pictures(num + 1).Select
With Selection
.Left = ActiveCell.Left
.Top = ActiveCell.Top
.Width = ActiveCell.Width
.Height = ActiveCell.Height
.Placement = xlMoveAndSize
End With
End Sub
▼ 두 번째 버튼과 연결할 함수가 완료되었다면 실행전에 이미지를 추가할 셀을 선택합니다. 그리고 이미지가 들어갈 셀의 크기도 조절합니다.
▼ 사용자 정의 폼에 두 번째 버튼인 셀에 추가 버튼을 눌러 선택한 셀로 이미지가 제대로 들어가는지 확인합니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 이미지 셀 크기에 자동으로 삽입하는 매크로 만들기 ▶ 엑셀 VBA - 사용자 정의 폼에 그림표시와 셀에 추가하기 ▶ 엑셀 VBA 카메라 기능을 매크로로 작성하기 ▶ 엑셀 Excel 이력서 사진 추가, 셀에 이미지 고정시키기 ▶ 엑셀 Excel 선택창을 이용해서 그림, 이미지를 숨기기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 개발할 때 로그 출력하는 방법 (0) | 2023.07.08 |
---|---|
엑셀 VBA 콤보 상자에 하나 혹은 여러 개의 열 추가하는 방법 (0) | 2023.07.08 |
엑셀 VBA 스핀(Spin) 컨트롤 사용하기 (0) | 2023.07.03 |
엑셀 VBA 영역을 선택했을 때 이벤트 처리하기 (0) | 2023.07.02 |
엑셀 VBA 무한 루프 빠져 나오거나 취소 기능 없애는 방법 (0) | 2023.06.29 |
엑셀 VBA 매크로 함수로 공백 제거하기, Trim, RTrim, LTrim 함수 이용 (0) | 2023.06.28 |
엑셀 VBA 날짜 데이터를 비교하거나 연산하기 (0) | 2023.06.27 |
엑셀 VBA 변수 범위 종류와 설정 방법 (1) | 2023.06.23 |