- 최초 작성일: 2005-06-23
- 최종 수정일: 2026-09-30
- 조회수: 7 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 웹 상의 그림파일 불러오기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
질문 하나
안녕하세요. 매크로를 쓰다가 막혀서 해결할 방법을 찾다가 마침 이곳에 들어오게 되어 질문 하나를 드립니다.
메시지박스를 이용해서 상품코드를 입력하면 상품정보를 자동적으로 데이터표시 시트에 뿌려주고 이미지 파일도 불러와 표시시트에 함께 보여주는 매크로를 만드려고 하는데요, 다른건 다하겠는데 상품코드로 된 이미지 파일(하위 디렉토리의 image폴더 안에 있음)은 자동적으로 어떻게 불러오는지 모르겠습니다. 우선 자료를 첨부할께요.. 좀 봐주세요... ㅠ.ㅠ
그리고 만약 상품코드가 데이터시트에 없는 상품코드일 경우 "상품이 없습니다." 이렇게 표시하려면 어떻게 해야하죠?
웹 상의 그림파일 불러오기
핵심 요약: 웹 이미지를 워크시트에 불러오기
이미지 파일을 통합 문서에 저장하지 않고 웹 서버에서 필요할 때마다 불러와 표시하는 방법입니다. 상품코드에 따라 이미지 주소를 만들어 Pictures.Insert로 삽입합니다.
- 1단계: 상품코드로 이미지 주소(strPath)를 만듭니다.
- 2단계: 기존 그림을 삭제하고 Pictures.Insert로 웹 이미지를 삽입합니다.
- 3단계: 이름 정의한 셀 기준으로 위치와 크기, 테두리를 지정합니다.
Step 1: 웹에서 그림 불러오기
잊을만 하면 한번씩 들어오는 유형의 질문입니다. 뭐냐하면… 위에서 살펴보신 바와 같이, 그림 파일을 워크시트에 불러오는 방법에 대한 것입니다.
다른 워크시트 상에 있는 그림을 불러오는 방법이나 하드 디스크에 들어있는 그림 파일을 불러오는 방법에 대해서는 오래 전 강좌에서 다루었으므로 직접 찾아보시기 바랍니다. (앞의 것은 X0148 강좌, 뒤의 것은 VB0050 강좌로군요 ^^)
아래의 버튼을 클릭해 보세요!
상품코드를 선택하면 그에 따라 내용이 변경됨과 동시에, 상품의 이미지도 연동이 되어 바뀌게 됩니다. 이 때 나타나는 이미지는 하드디스크나 워크북에 저장되어 있는 것이 아니라 웹 상에서 불러온 것입니다.
대개의 경우, 이미지 파일은 파일에 몽땅 저장해 놓고 필요할 때마다 불러와서 사용하는 그런 과격한(?) 경우는 없습니다.
Q : 아니, 그러면 X0148 강좌에서 소개하신 건 뭡니까?
A : 그건… 그런 방법도 있다는 것을 소개해 드리기 위한 것입니다. X0148 강좌는… 이미지 파일을 불러오는 방법을 설명드리려 만든 예제가 아니라 '이름 정의' 방법에 대한 응용 예제였더랬습니다!
Step 2: 코드 살펴보기
그건 그렇고… 사용된 코드를 살펴볼까요?
Sub CallPicFromWeb()
Application.ScreenUpdating = False
' 이미지 로딩 속도를 높이기 위해 화면 갱신을 중단합니다.
Dim picPict As Picture
Dim strPath As String
Dim shtSheet As Worksheet
strPath = "http://www.iExceller.com/MyXls/test_image/" & Range("Index2") & ".jpg"
' 이미지를 불러올 웹 사이트 및 파일 이름을 strPath 문자열 변수에 저장합니다.
' 이 때 파일 이름은 회전자와 연결되어 있는 셀(B35)에 입력된 것을 읽어 옵니다.
Set shtSheet = Sheets("Preface")
On Error Resume Next
' 작업 도중 오류가 발생하더라도 그냥 넘어갑니다.
shtSheet.Pictures.Delete
Set picPict = shtSheet.Pictures.Insert(strPath)
' 워크시트에 있는 이미지들을 지운 다음, 웹 상에 있는 이미지 파일을 가져옵니다.
With picPict
' 이미지 파일을 붙여넣을 위치와 크기를 지정합니다.
.Left = Range("ImageStart").Left + 3
.Top = Range("ImageStart").Top + 3
.Width = Range("ImageStart").Width * 4.58
.Height = Range("ImageStart").Height * 15.6
' 이미지 파일의 테두리를 설정합니다.
With .ShapeRange.Line
.Weight = 3#
.Visible = msoTrue
.BackColor.RGB = RGB(255, 255, 255)
End With
End With
Application.ScreenUpdating = True
End Sub
싱거우리만치 간단하군요. 조금만 응용하시면 자신만의 신상명세서나 인사기록부 등을 만드실 수 있을 것입니다.
다음 시간에 또…
정리 — 웹 이미지 불러오기 코드 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 이미지 주소 | strPath = "http://…/" & Range("Index2") & ".jpg" | 상품코드로 웹 이미지 주소 조합 |
| 기존 그림 삭제 | shtSheet.Pictures.Delete | 이전 이미지 제거 |
| 이미지 삽입 | shtSheet.Pictures.Insert(strPath) | 웹 이미지를 워크시트에 삽입 |
| 위치와 크기 | .Left / .Top / .Width / .Height | 이름 정의된 셀 기준으로 지정 |
| 화면 갱신 | Application.ScreenUpdating | 작업 중에는 끄고 끝나면 켬 |
자주 묻는 질문 (FAQ)
Q1. 이미지를 워크북에 저장하지 않고 웹에서 불러오는 이유는 무엇인가요?
이미지를 모두 파일에 저장해 두면 파일 용량이 커지고 관리가 어렵습니다. 웹 서버에 이미지를 두고 필요할 때마다 불러오면 파일이 가볍고 이미지 갱신도 쉽습니다.
Q2. 하드디스크에 있는 그림 파일을 불러오려면 어떻게 하나요?
같은 Pictures.Insert 메서드에 웹 주소 대신 파일의 전체 경로를 지정하면 됩니다.
Q3. On Error Resume Next는 왜 사용했나요?
이미지를 불러오지 못하는 경우에도 오류 메시지 없이 그냥 넘어가도록 하기 위해서입니다. 실제 업무에서는 상품코드가 없는 경우 등에 안내 메시지를 표시하도록 처리하는 것이 좋습니다.
마치며
싱거우리만치 간단한 코드이지만 조금만 응용하면 이미지가 연동되는 신상명세서나 인사기록부 같은 문서를 만들 수 있습니다.