[VBA매크로] 폴더내에 그림파일명과 일치 하는 사진(그림) 넣기 질문요...

[VBA매크로] 폴더내에 그림파일명과 일치 하는 사진(그림) 넣기 질문요...

작성일 2019.11.17댓글 1건
    게시물 수정 , 삭제는 로그인 필요


저는 참조된 파일명에 맞는 사진을 바로 위 병합된 셀에 넣고 싶습니다ㅠ


어떻게 수정해야 할지를 모르겠네요ㅠ








제가 따라해본 아래에 VBA매크로입니다.


출처:https://blog.naver.com/rosa0189/60156371664



Option Explicit
Sub insert_Pictures_Matching_Name()

    Dim fileName As String                        '각 파일 이름을 넣을 변수
Dim strPath As String '폴더의 경로를 넣을 변수
Dim C As Range '검색에 일치한 셀을 넣을 변수
Dim strName As String '파일 확장자 제외한 이름을 넣을 변수
   
    Application.ScreenUpdating = False     '화면 업데이트 (일시) 정지
    
    With Application.FileDialog(msoFileDialogFolderPicker)  '폴더선택 창에서
.Show '폴더 선택창 띄우기
 
        If .SelectedItems.Count = 0 Then      '취소 선택 시
Exit Sub'매크로 중단
        Else
            strPath = .SelectedItems(1) & "\" '폴더 경로를 변수에 넣음
        End If
    End With

  
    ActiveSheet.Pictures.Delete                  '기존 사진들 삭제
fileName =Dir(strPath) '(폴더내)각 그림파일 이름을 변수에 넣음
 
If fileName = "" Then '폴더에 파일이 없으면
        MsgBox "폴더에 파일이 없습니다."    '메시지 출력
Exit Sub'매크로 중단
    End If


    Do While fileName <> ""                      '이름이 없지 않다면, 즉, 파일이 존재하면
       
        strName = Split(fileName, ".")(0)       '파일 확장자 제거한 이름 추출
        Set C = ActiveSheet.UsedRange.Find(strName, , , xlWhole)  '그림파일과 일치하는 셀을 찾음
 
        If Not C Is Nothing Then                  '그림파일과 동일한 이름이 셀에 존재하면
            ActiveSheet.Pictures.Insert(strPath & fileName).Select  '각 그림파일 삽입
  

            Set C = C.Next.MergeArea           '셀병합 셀을 C에 넣음
            
With Selection'선택된 그림파일
.Name = "Temp"'복사된 사진의 이름을 변경
                .ShapeRange.LockAspectRatio = msoFalse  '그림의 가로/세로비율 고정 해제
.Height = C.Height - 4 '그림의 가로크기 지정
.Width = C.Width - 4 '그림의 세로크기 지정
               
.Copy'그림을 복사
                ActiveSheet.PasteSpecial Link:=False

'그림 링크깨고 붙여넣기
                ActiveSheet.Pictures("Temp").Delete '원본 그림파일 삭제
            End With
           
With Selection'(복사되어)선택된 그림파일
.Left = C.Left + 2'그림의 왼쪽위치 지정
.Top = C.Top + 2 '그림의 윗쪽위치 지정
            End With
        End If
       
fileName =Dir'다음 파일을 파일이름에 넣음
Loop'무한 반복
   
End Sub 



profile_image 익명 작성일 -

Option Explicit Sub ins_pic() Dim strPath$ Dim rng As Range, sh As Shape Dim sFname$, s$ '---------------------------------------- ' 폴더 선택창을 띄우는 코드 '---------------------------------------- With Application.FileDialog(msoFileDialogFolderPicker) '폴더선택 창에서 .Show '폴더 선택창 띄우기 If .SelectedItems.Count = 0 Then '취소 선택 시 Exit Sub '매크로 중단 Else strPath = .SelectedItems(1) & "\" '폴더 경로를 변수에 넣음 End If End With '---------------------------------------- ' 기존 사진 지우기 '---------------------------------------- For Each sh In ActiveSheet.Shapes If sh.Type = msoPicture Then sh.Delete Next '---------------------------------------- ' 사진 넣기 '---------------------------------------- Set rng = Range("C11") '첫 사진의 이름이 있는 셀 Do s = Mid(rng, InStr(1, rng, ".") + 2) '"1. 가"에서 숫자, 점, 공백을 뺀 나머지 사진 이름 추출 sFname = Dir(strPath & s & ".*") '사진 이름을 선택한 폴더에서 찾기 If Len(sFname) > 0 Then '해당 사진이 있으면 With rng.Offset(-1).MergeArea '사진 이름이 있는 셀의 바로 위의 셀의 크기 및 위치에 맞게 ''''''' 그림을 삽입한다 ''''''' 첫 인수 False는 사진을 링크형태로 넣지 않는다는 의미, '''''''두번재 인수 True는 사진을 엑셀파일에 삽입하여 함께 저장한다는 의미 ActiveSheet.Shapes.AddPicture strPath & sFname, False, True, .Left, .Top, .Width, .Height End With End If Set rng = rng.Offset(, 2) '다음 사진의 이름이 있는 셀은 오른쪽으로 두칸 간 곳임 ''그런데 오른쪽으로 두 칸 간 곳이 W열을 넘어서면 ''아래로 7행 내려간 C열에서 다시 시작함 If rng.Column > Range("W1").Column Then Set rng = Cells(rng.Row + 7, "C") ''''이런 식으로 반복하고, 아래로 40행이하로는 더 내려가지 않고 종료 Loop Until rng.Row > Range("A40").Row MsgBox "완료" End Sub