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

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

[레벨:30]아별

2013.02.20 21:51



광택입니다님..

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

 

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

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

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

 

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)