만약에 별도의 시트에 이미지가 모두 첨부되어 있다면.. 이름을 이용해서 동적 참조가 가능할 수도 있겠지만..
파일을 열어서 첨부하는 문제이니.. VBA로 할 수 밖에 없습니다.
코드에 주석을 열심히 달아놨습니다만.. 아래 코드를 이해하실 수 있을지는 잘 모르겠습니다.
생각보다 시간이 많이 걸렸구요.. 고생했습니다. 애썼다 한말씀해주세요.. ㅎㅎ
Option Explicit
Public pointNumber As String
Sub insertPicture()
'엑셀 파일이 있는 경로를 변수로 지정합니다. Dim basePath As String basePath = ActiveWorkbook.Path
'작업할 시트들을 변수로 지정합니다. '그래야 나중에 시트 이름을 바꿔도 아래 2줄만 바꾸면 되게끔요.. Dim S_ps As Worksheet Set S_ps = Worksheets("표석대장") Dim S_js As Worksheet Set S_js = Worksheets("조사현황")
'삼각점번호의 값을 masterCode라는 변수에 집어 넣지요~ Dim masterCode As String masterCode = S_ps.Range("J5").Value
'사진 삽입에 필요한 변수 정의 Dim R As Range Dim strFile As String
'사진을 삽입하기 전에 기존 사진을 제거합니다. S_ps.Select If ActiveSheet.DrawingObjects.Count > 0 Then Call deleteObject End If
'표석 대장 시트에 표지 사진 입력 Set R = S_ps.Range("G20:AJ42") strFile = basePath & "\images\" & masterCode & "표지.JPG" Call resizePic(S_ps, R, strFile)
'사진을 삽입하기 전에 기존 사진을 제거합니다. S_js.Select If ActiveSheet.DrawingObjects.Count > 0 Then Call deleteObject End If
'조사현황 시트에 근경 사진 입력 Set R = S_js.Range("A3:M3") strFile = basePath & "\images\" & masterCode & "근경.JPG" Call resizePic(S_js, R, strFile)
'조사현황 시트에 원경 사진 입력 Set R = S_js.Range("A5:M5") strFile = basePath & "\images\" & masterCode & "원경.JPG" Call resizePic(S_js, R, strFile)
'시트에 이미지 삽입 후에 셀 사이즈에 맞게 이미지 조정. ' resizePic( 삽입할 시트, 삽입할 셀 영역, 삽입할 파일 이름 ) Sub resizePic(S As Worksheet, R As Range, strFile As String) S.Select R.Select
Dim fileName As String fileName = Dir(strFile)
If Len(fileName) > 0 Then S.Pictures.Insert(strFile).Select With Selection .Top = R.Top .Left = R.Left .Height = R.Height .Width = R.Width End With Else MsgBox "화일이 없어요~", vbInformation, "이미지 삽입 에러창" S.Range("j5").Select End End If End Sub
'사진을 삽입하기 전에 기존 사진을 제거합니다. Sub deleteObject() ActiveSheet.DrawingObjects.Select Selection.Delete End Sub
첨부파일을 다운 받아, 압축을 푸시고 엑셀 파일을 여신다음..
"J5"셀의 값을 평택419, 평택422, 평택423 으로 바꿔서 선택해보세요.
엑셀 파일이 저장되어 있는 폴더 밑에 있는 images라는 폴더에 있는 해당 이미지를 가지고와서 셀 사이즈에 맞게 쏙 들어갑니다.
다운받기 : abyul_20090729_insertPicture.zip
솔직히..
이걸 해드릴까 말까 살짝 고민을 했지요.. ㅎㅎ
만드는 방법을 설명을 해드라자니 막막합니다. =_=;;
일단 보시지요...
기본적으로 엑셀의 기본 기능으로는 불가능합니다. VBA를 사용하실 수 밖에 없구요..
만약에 별도의 시트에 이미지가 모두 첨부되어 있다면.. 이름을 이용해서 동적 참조가 가능할 수도 있겠지만..
파일을 열어서 첨부하는 문제이니.. VBA로 할 수 밖에 없습니다.
코드에 주석을 열심히 달아놨습니다만.. 아래 코드를 이해하실 수 있을지는 잘 모르겠습니다.
생각보다 시간이 많이 걸렸구요.. 고생했습니다. 애썼다 한말씀해주세요.. ㅎㅎ
Option Explicit
Public pointNumber As String
Sub insertPicture()
'엑셀 파일이 있는 경로를 변수로 지정합니다.
Dim basePath As String
basePath = ActiveWorkbook.Path
'작업할 시트들을 변수로 지정합니다.
'그래야 나중에 시트 이름을 바꿔도 아래 2줄만 바꾸면 되게끔요..
Dim S_ps As Worksheet
Set S_ps = Worksheets("표석대장")
Dim S_js As Worksheet
Set S_js = Worksheets("조사현황")
'삼각점번호의 값을 masterCode라는 변수에 집어 넣지요~
Dim masterCode As String
masterCode = S_ps.Range("J5").Value
'사진 삽입에 필요한 변수 정의
Dim R As Range
Dim strFile As String
'사진을 삽입하기 전에 기존 사진을 제거합니다.
S_ps.Select
If ActiveSheet.DrawingObjects.Count > 0 Then
Call deleteObject
End If
'표석 대장 시트에 표지 사진 입력
Set R = S_ps.Range("G20:AJ42")
strFile = basePath & "\images\" & masterCode & "표지.JPG"
Call resizePic(S_ps, R, strFile)
'사진을 삽입하기 전에 기존 사진을 제거합니다.
S_js.Select
If ActiveSheet.DrawingObjects.Count > 0 Then
Call deleteObject
End If
'조사현황 시트에 근경 사진 입력
Set R = S_js.Range("A3:M3")
strFile = basePath & "\images\" & masterCode & "근경.JPG"
Call resizePic(S_js, R, strFile)
'조사현황 시트에 원경 사진 입력
Set R = S_js.Range("A5:M5")
strFile = basePath & "\images\" & masterCode & "원경.JPG"
Call resizePic(S_js, R, strFile)
S_ps.Select
S_ps.Range("J5").Select
pointNumber = Worksheets("표석대장").Range("J5").Value
End Sub
'시트에 이미지 삽입 후에 셀 사이즈에 맞게 이미지 조정.
' resizePic( 삽입할 시트, 삽입할 셀 영역, 삽입할 파일 이름 )
Sub resizePic(S As Worksheet, R As Range, strFile As String)
S.Select
R.Select
Dim fileName As String
fileName = Dir(strFile)
If Len(fileName) > 0 Then
S.Pictures.Insert(strFile).Select
With Selection
.Top = R.Top
.Left = R.Left
.Height = R.Height
.Width = R.Width
End With
Else
MsgBox "화일이 없어요~", vbInformation, "이미지 삽입 에러창"
S.Range("j5").Select
End
End If
End Sub
'사진을 삽입하기 전에 기존 사진을 제거합니다.
Sub deleteObject()
ActiveSheet.DrawingObjects.Select
Selection.Delete
End Sub