Sub 사진넣기() Dim rngC As Range Dim strPath As String If TypeName(Selection) = "Range" Then Set rngC = Selection Dim cnt As Long: cnt = rngC.Parent.Shapes.Count strPath = Application.Dialogs(xlDialogInsertPicture).Show If strPath = "False" Then Exit Sub Dim i As Long For i = cnt + 1 To cnt + Selection.Count With Selection(i) .ShapeRange.LockAspectRatio = msoFalse .Left = rngC.Offset(, i - 1).Left + 2 .Top = rngC.Offset(, i - 1).Top + 2 .Height = rngC.Offset(, i - 1).Height - 4 .Width = rngC.Offset(, i - 1).Width - 4 End With Next i Else MsgBox "영역을 선택하고 재실행" End If Set rngC = Nothing End Sub
제가 드린 코드가 정석일 듯 싶네요..
광택입니다님 코드는 일단 워크시트에 이미지를 부어 버린 다음에..
나중에 조정하는 것이라서 컨트롤 하지 못하는 부분이 많습니다.
제가 드린 코드는 일단 파일을 선택하고.. 하나씩 삽입하는 것이기 때문에.. 삽입하기 전에 파일명을 검사한다든지..
파일 유형별로 다른 옵션을 준다든지 하는 것이 가능하겠네요..
VBA를 계속 하실 생각이 있으시다면..
Offset 매서드를 필히 익히셔야합니다.
VBE 창에서 Offset의 도움말을 검색해보세요.. 댓글 마지막 부분에 도움말을 복사한 걸 붙여넣었습니다.
행 방향으로 이미지가 삽입되게 하려면 아래처럼 수정하시면 됩니다.
[ 기존] Left:=rng.Offset(i - 1).Left
[ 수정 ] Left:=rng.Offset(0, i - 1).Left
기존코드와 비교해 보면 0,만 추가 되었죠?
Offset은 셀범위.Offset(행, 열) 과 같이 사용되며, 열 부분은 생략이 가능합니다.
rng.Offset(1) 이라고 하면 rng라는 셀을 기준으로 행방향으로 한칸 아래로 내려가라는 얘기고..(열 부분은 생략됐습니다.)
rng.Offset(0,1)이라고 하면 rng라는 셀을 기준으로 열방향으로 한칸 오른쪽으로 가라는 얘깁니다.
0을 제거 하고 다음과 같이 쓰기도 합니다. rng.Offset(,1) 똑같이 오른쪽으로 한칸 가라는 얘깁니다.
[ 아래는 이미지가 열방향(오른쪽)으로 삽입되도록 수정된 코드입니다. ]
Sub abInsertImagesOptional() Dim i As Long Dim objPicture As Object Dim rng As Range: Set rng = ActiveCell With Application.FileDialog(msoFileDialogFilePicker) If .Show = vbTrue Then For i = 1 To .SelectedItems.Count Set objPicture = rng.Parent.Shapes.AddPicture(Filename:=.SelectedItems(i), _ LinkToFile:=msoFalse, _ SaveWithDocument:=msoTrue, _ Left:=rng.Offset(0, i - 1).Left, _ Top:=rng.Offset(0, i - 1).Top, _ Width:=rng.Offset(0, i - 1).Width, _ Height:=rng.Offset(0, i - 1).Height) Next i End If End With End Sub
광택입니다님..
웬만하면 파일을 첨부해주시면 좋겠습니다.. ^_^;;
광택입니다님... 코드를 수정해드린 코드의 경우..
아래처럼 수정하시면 될 것 같습니다.
Selection(i)하면 현재 선택된 아이들에 대해서만 동작할 줄 알았더니..
기존의 Shape를 같이 묶어서 순번을 매기네요..
Sub 사진넣기()
Dim rngC As Range
Dim strPath As String
If TypeName(Selection) = "Range" Then
Set rngC = Selection
Dim cnt As Long: cnt = rngC.Parent.Shapes.Count
strPath = Application.Dialogs(xlDialogInsertPicture).Show
If strPath = "False" Then Exit Sub
Dim i As Long
For i = cnt + 1 To cnt + Selection.Count
With Selection(i)
.ShapeRange.LockAspectRatio = msoFalse
.Left = rngC.Offset(, i - 1).Left + 2
.Top = rngC.Offset(, i - 1).Top + 2
.Height = rngC.Offset(, i - 1).Height - 4
.Width = rngC.Offset(, i - 1).Width - 4
End With
Next i
Else
MsgBox "영역을 선택하고 재실행"
End If
Set rngC = Nothing
End Sub
제가 드린 코드가 정석일 듯 싶네요..
광택입니다님 코드는 일단 워크시트에 이미지를 부어 버린 다음에..
나중에 조정하는 것이라서 컨트롤 하지 못하는 부분이 많습니다.
제가 드린 코드는 일단 파일을 선택하고.. 하나씩 삽입하는 것이기 때문에.. 삽입하기 전에 파일명을 검사한다든지..
파일 유형별로 다른 옵션을 준다든지 하는 것이 가능하겠네요..
VBA를 계속 하실 생각이 있으시다면..
Offset 매서드를 필히 익히셔야합니다.
VBE 창에서 Offset의 도움말을 검색해보세요.. 댓글 마지막 부분에 도움말을 복사한 걸 붙여넣었습니다.
행 방향으로 이미지가 삽입되게 하려면 아래처럼 수정하시면 됩니다.
[ 기존] Left:=rng.Offset(i - 1).Left
[ 수정 ] Left:=rng.Offset(0, i - 1).Left
기존코드와 비교해 보면 0,만 추가 되었죠?
Offset은 셀범위.Offset(행, 열) 과 같이 사용되며, 열 부분은 생략이 가능합니다.
rng.Offset(1) 이라고 하면 rng라는 셀을 기준으로 행방향으로 한칸 아래로 내려가라는 얘기고..(열 부분은 생략됐습니다.)
rng.Offset(0,1)이라고 하면 rng라는 셀을 기준으로 열방향으로 한칸 오른쪽으로 가라는 얘깁니다.
0을 제거 하고 다음과 같이 쓰기도 합니다. rng.Offset(,1) 똑같이 오른쪽으로 한칸 가라는 얘깁니다.
[ 아래는 이미지가 열방향(오른쪽)으로 삽입되도록 수정된 코드입니다. ]
Sub abInsertImagesOptional()
Dim i As Long
Dim objPicture As Object
Dim rng As Range: Set rng = ActiveCell
With Application.FileDialog(msoFileDialogFilePicker)
If .Show = vbTrue Then
For i = 1 To .SelectedItems.Count
Set objPicture = rng.Parent.Shapes.AddPicture(Filename:=.SelectedItems(i), _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=rng.Offset(0, i - 1).Left, _
Top:=rng.Offset(0, i - 1).Top, _
Width:=rng.Offset(0, i - 1).Width, _
Height:=rng.Offset(0, i - 1).Height)
Next i
End If
End With
End Sub
지정한 범위부터 오프셋되는 범위를 나타내는 Range 개체를 반환합니다.
구문
expression.Offset(RowOffset, ColumnOffset)
expression Range 개체를 나타내는 변수입니다.
매개 변수
예제
다음은 Sheet1에서 현재 셀부터 오른쪽으로 세 열, 아래로 세 행을 활성화시키는 예제입니다.
다음은 Sheet1에 머리글 행이 있는 테이블이 들어 있다고 가정하고, 머리글 행을 선택하지 않고 테이블을 선택하는 예제입니다. 이 예제를 실행하기 전에 현재 셀이 테이블에 있어야 합니다.
© 2006 Microsoft Corporation. All rights reserved