1. FAQ
  2. 엑셀(Excel)
  3. AfterEffects
  4. Premiere
  5. Photoshop
  6. ETC

이 게시판은 아별닷컴 회원만 질문을 올릴 수 있습니다. 회원에게 주어지는 특권인셈이지요. 회원이 아닌 분들은 열람만 가능합니다.

사진 매크로 질문입니다 ^^

VBA 조회 수 3828 추천 수 0 2013.02.19 23:19:37

안녕하세요. 아별님

 

오랜만에 또 질문을 드립니다.

 

요즘 사진 첨부파일 관련하여 매크로를 만들었는데 궁금한 점이 있어 질문 드립니다.

 

Sub 사진넣기()

    Dim rngC As Range
    Dim strPath As String
   
    If TypeName(Selection) = "Range" Then
        Set rngC = Selection
       
        strPath = Application.Dialogs(xlDialogInsertPicture).Show
        If strPath = "False" Then Exit Sub
       
        With Selection
            .ShapeRange.LockAspectRatio = msoFalse
            .Left = rngC.Left + 2
            .Top = rngC.Top + 2
            .Height = rngC.Height - 4
            .Width = rngC.Width - 4
        End With
       
    Else
        MsgBox "영역을 선택하고 재실행"
        End If
   
    Set rngC = Nothing
End Sub

 

해당 셀에 사진이 첨부 되는 매크로를 만들어 지는데

 

다음과 같이 셀이 6개가 있고 사진이 6개가 순서대로 있을때

1번열 부터 -> 순서대로 사진이 들어 갈수 있게 매크로를 만들수는 없을까요?

항상 도움 주시는 아별님께 감사 드립니다 . ^^

 

1 2 3 4 5 6

 

         


댓글 '5'

profile

[레벨:30]아별

2013.02.20 00:48:25
*.130.73.75




광택입니다님..

오랫만이시네요..

오랫만에 올리신 질문이라 첨부파일을 올려주시는걸 깜빡하셨나봅니다.

다음부터는 꼭 첨부파일로 올려주시기 바랍니다.


제가 답변을 달면 꼭 피드백을 댓글로 달아주세요..

원하시는 답변인지.. 잘 이해가 안된다든지.. 등등..

앞서 질문하신 10개의 질문에 대한 피드백이 2개밖에 없네요..


제가 어려운 부탁드리는건 아닌 것 같은데요..

혹시.. 어려우신가요?


암튼.. 답변 드립니다.

아래 녹색으로 표시한 부분처럼 수정하였습니다.


Sub 사진넣기()
    Dim rngC As Range
    Dim strPath As String
    If TypeName(Selection) = "Range" Then
        Set rngC = Selection
        strPath = Application.Dialogs(xlDialogInsertPicture).Show
        If strPath = "False" Then Exit Sub
        Dim i As Long
        For i = 1 To 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

 

 

질문하신 코드를 베이스로 답변 드려서 위와 같은 코드가 나왔구요..

사실 저는 아래와 같이 코딩하여 사용합니다.

 

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(i - 1).Left, _
                    Top:=rng.Offset(i - 1).Top, _
                    Width:=rng.Offset(i - 1).Width, _
                    Height:=rng.Offset(i - 1).Height)
            Next i
        End If
    End With
End Sub

 

둘다 참고하시기 바랍니다.

 

도움이 되셨기를..

 

그리고.. 피드백 댓글 꼭 달아주시길..

 

[레벨:2]광택입니다

2013.02.20 21:12:08
*.139.148.253

감사합니다 아별님.

 

보내주신 답변을 참고 하여 실행하여 보았는데  제글에 답변달아주신것은 ^^

한행만 실행하였을때는 사진파일이 잘들어 가는데

한행만 실행하고 두번째 행에 삽일을 살때는 사진이 이상하게 되어 버리네요 ^^ . 이해력 부족으로 뭐가 문제인지 잘모르겠네요

 

아별님 방법으로 실행하였을때는 두번째 작업하는것은 문제가 없는데

열 >>>> 이쪽이 아니라 행 아래쪽으로 내려가네요 ^^ 이것도 어떻게 하면 열로 가는지도 설명을 부탁 드립니다.

 

항상 도와 주셔서 감사 합니다. ^^

 

 

profile

[레벨:30]아별

2013.02.20 21:51:42
*.104.126.21



광택입니다님..

웬만하면 파일을 첨부해주시면 좋겠습니다.. ^_^;;

 

광택입니다님... 코드를 수정해드린 코드의 경우..

아래처럼 수정하시면 될 것 같습니다.

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 개체를 나타내는 변수입니다.

매개 변수

이름 필수/선택 데이터 형식 설명
RowOffset 선택 Variant 해당 범위의 위치를 나타내는 행 수(양수, 음수, 0)입니다. 값이 양수이면 아래로 오프셋되고 음수이면 위로 오프셋됩니다. 기본값은 0입니다.
ColumnOffset 선택 Variant 해당 범위의 위치를 나타내는 열 수(양수, 음수, 0)입니다. 값이 양수이면 오른쪽으로 오프셋되고 음수이면 왼쪽으로 오프셋됩니다. 기본값은 0입니다.

예제

다음은 Sheet1에서 현재 셀부터 오른쪽으로 세 열, 아래로 세 행을 활성화시키는 예제입니다.

Visual Basic for Applications
Worksheets("Sheet1").Activate
ActiveCell.Offset(rowOffset:=3, columnOffset:=3).Activate

다음은 Sheet1에 머리글 행이 있는 테이블이 들어 있다고 가정하고, 머리글 행을 선택하지 않고 테이블을 선택하는 예제입니다. 이 예제를 실행하기 전에 현재 셀이 테이블에 있어야 합니다.

Visual Basic for Applications
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
    tbl.Columns.Count).Select

120 xlv xlv120

© 2006 Microsoft Corporation. All rights reserved

 

[레벨:2]광택입니다

2013.03.03 21:18:58
*.139.148.253

한동안 다른일때매 신경 못썼다가 ^^ 이거 보고 해결했네요

 

^^ 항상 감사드립니다

profile

[레벨:30]아별

2013.03.05 02:25:27
*.130.73.75

광택입니다님..

한참동안 확인 댓글이 없길래..

잊혀진줄 알고 서운해하던차였습니다.

확인 댓글 감사합니다. ^^

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 공지 [공지] 아별닷컴의 엑셀 질문방 폐쇄합니다. 카페 질문방 이용하세요.. imagefile [레벨:30]아별 2015-04-23 42541
73 VBA 선택한 영역 랜덤 색 대해서 질문하겟습니다. file [4] [레벨:4]신강현 2013-03-13 3779
72 VBA vba Activate 오류 질문합니다 file [3] [레벨:4]신강현 2013-03-11 3239
71 VBA 엑셀 vba 함수 질문드릴게요. [4] [레벨:4]신강현 2013-03-04 4813
70 VBA 하나씩 검색하는 질문입니다. file [3] [레벨:4]신강현 2013-02-20 2803
» VBA 사진 매크로 질문입니다 ^^ [5] [레벨:2]광택입니다 2013-02-19 3828
68 VBA vba 등록질문하겟습니다. file [6] [레벨:4]신강현 2013-02-02 3946
67 VBA 진행바 응용(다른 메뉴 실행중) _ 작업 진행바 Progress bar file [3] [레벨:5]맑은이슬 2013-02-02 4270
66 VBA 시트... [2] [레벨:1]마루 2013-02-01 3379
65 VBA 프로그램바 질문 _ 작업 진행바 Progress bar file [2] [레벨:4]신강현 2013-01-30 6097
64 VBA 파일&폴더 자꾸 글올려서 죄송합니다. open문 질문입니다.ㅠㅠ [1] [레벨:4]신강현 2013-01-29 3694
63 VBA textbox 크기 질문 [2] [레벨:4]신강현 2013-01-29 3354
62 VBA 사용자 지정 메뉴 크기조정 imagefile [2] [레벨:5]맑은이슬 2013-01-29 3253
61 VBA 같은데이타 병합 file [2] [레벨:4]고수가되고파 2013-01-21 3860
60 VBA .Find 랜덤 컨틀로바질문입니다.. [3] [레벨:4]신강현 2013-01-21 3884
59 VBA win7 64bit / 64bit 엑셀 / 32bit DLL의 사용법이 궁금합니다. file [레벨:1]컴바치 2013-01-04 5042
58 VBA 데이터 유효성 질문.. 리스트에서 항목 선택하면 기존 항목에 더해져서 표시되게 하기 secretimage [1] [레벨:1]미소가인 2012-12-22 43
57 VBA 엑셀 랜덤돌리기 질문입니다 file [2] [레벨:4]신강현 2012-12-07 5181
56 VBA 파일&폴더 VBA 수정하여 사용하다가 막혀서 문의드립니다. file [2] [레벨:1]예진 2012-11-23 4077
55 VBA 특정폴더 파일 실행 file [4] [레벨:4]고수가되고파 2012-11-22 3925
54 VBA 병합효과 file [3] [레벨:4]고수가되고파 2012-11-22 6013