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

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

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

VBA 조회 수 3799 추천 수 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 41857
582 엑셀일반 도대체 외부연결 값은 통합문서 어디에 저장이 될까요? imagefile [2] [레벨:2]song786 2013-02-22 4777
581 엑셀일반 하위레벨 분류 표시 file [4] [레벨:3]읍내꽃미남 2013-02-20 3840
580 VBA 하나씩 검색하는 질문입니다. file [3] [레벨:4]신강현 2013-02-20 2785
579 엑셀일반 조건에 따라 데이터를 검색하거나 입력하시오..에 대한 질문드립니다 file [3] [레벨:1]화령월향 2013-02-20 2959
» VBA 사진 매크로 질문입니다 ^^ [5] [레벨:2]광택입니다 2013-02-19 3799
577 날짜/시간 수식 날짜 함수 관련 문의합니다. file [3] [레벨:3]fmbass98 2013-02-19 2915
576 기타 안녕하세요 아별님^^ [1] [레벨:2]쿠라 2013-02-15 2729
575 엑셀일반 질문이 있습니다 셀수정시간을 표시 해주는..방법??? [4] [레벨:2]큰아빠에요 2013-02-09 4038
574 엑셀일반 그래프작성 file [1] [레벨:0]핑크푸우 2013-02-08 3015
573 날짜/시간 수식 엑셀 시간관련문의 file [1] [레벨:1]박주연 2013-02-08 3399
572 엑셀수식 월마다 불규칙한 자재사용량의 월사용량 file [1] [레벨:4]성투은자 2013-02-06 2998
571 엑셀일반 부분합 질문입니다. file [7] [레벨:5]정화 2013-02-06 3482
570 엑셀수식 이름 범위를 여러열에 걸쳐 지정 후 조건문 수식 만들기 file [1] [레벨:4]성투은자 2013-02-06 3073
569 엑셀수식 사용자목록 필요여부 file [2] [레벨:4]성투은자 2013-02-04 3028
568 엑셀일반 엑셀 질문 몇가지 드립니다. file [1] [레벨:1]나도그래짱 2013-02-03 4171
567 VBA vba 등록질문하겟습니다. file [6] [레벨:4]신강현 2013-02-02 3932
566 VBA 진행바 응용(다른 메뉴 실행중) _ 작업 진행바 Progress bar file [3] [레벨:5]맑은이슬 2013-02-02 4251
565 엑셀수식 여러가지 조건을 고려한 수식을 한 셀 안에 표시하기 file [3] [레벨:4]성투은자 2013-02-01 3794
564 VBA 시트... [2] [레벨:1]마루 2013-02-01 3370
563 VBA 프로그램바 질문 _ 작업 진행바 Progress bar file [2] [레벨:4]신강현 2013-01-30 6082