OfficeTutor.com
배움터 나눔터 교육센터 오튜장터
 통합검색  
  Home > 나눔터 > 엑셀 > 묻고답하기
엑셀
워드
액세스
파워포인트
아웃룩
프런트페이지
인포패스
원노트
비지오
쉐어포인트
포토드로우
퍼블리셔
오피스공통
MVP 안내
MVP 명예의 전당
MVP 카페

 

 

 

 
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 dew (dewdrop)

추천:  1
파일:     조회:  81
제목:   [RE][RE]이미지 자동 불러오기 VBA 실행 문제
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

  - 엑셀 버전(95,97,2000,xp,2003,2007):

 * 아래줄에 질문을 작성하세요 >>



이리저리 해봤는데도 안 돼서 다시 한 번 질문 드립니다ㅠㅠ


8일 주기로 반복되는 일정("안")은

 수정해주신 VBA로 이미지("안.jpg") 불러오기가 잘 됩니다.



그런데 명절과 같이 비주기적인 기념일을 표시하기 위해


=IF(COUNTIF(기념일!D100:D111,DATE(YEAR(AA22),MONTH(AA22),DAY(AA22)))>0,"명","")


이러한 함수를 통해 "명"이 뜨도록 설정해놓았는데,

폴더에 "명.jpg" 파일이 있어도,

 "명.bmp" 또는 "명.png" 파일이 있어도

 이미지가 불러와지지 않고,



 "명" 이 아닌 다른 텍스트로 시도해봐도 안 되더라구요...



그런데 함수를 다 지우고

"명"자만 썼을 경우에는 VBA 를 실행했을 때,

 "명.jpg" 만 불러와지고 ("안.jpg"는 불러오지 않음)

91 런타임 오류 메시지가 뜹니다.

 "개체 변수 또는 With 문의 변수가 설정되어 있지 않습니다"



그리고 디버그를 누르면

Loop While Not C Is Nothing And C.Address <> sAddr

이 부분이 노란색으로 표시가 돼요.



혹시 지금 사용하고 있는 VBA가 

하나의 파일만 불러오도록 설정되어있는 건가요?

 (예를 들어, "안"과 "명" 이 있을 때, 이름 기준 오름차순 정렬시

 앞에 오는 "명" 이미지만 불러오도록 하는 경우)



인터넷 찾아보면서 여러모로 시도해봤는데,

도저히 해답을 얻을 수가 없어서 다시 질문드립니다ㅠㅠ

 다시 한 번 도움을 부탁드립니다...ㅠㅠ 
 


수정해주셨던 VBA 입니다.
==============================================

Sub insert_Pictures_Matching_Name()
     Dim fileName As String                        '각 파일 이름을 넣을 변수
    Dim strPath As String                          '폴더의 경로를 넣을 변수
    Dim C As Range                                '검색에 일치한 셀을 넣을 변수
    Dim strName As String                        '파일 확장자 제외한 이름을 넣을 변수
    
     ' ------- 임시주소를 넣을 변수
    Dim sAddr 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)       '파일 확장자 제거한 이름 추출
        
         ' ------- Find 메소드 변수 추가 및 구문 수정
        Set C = ActiveSheet.UsedRange.Find(strName, , xlValues, xlWhole)  '그림파일과 일치하는 셀을 찾음
        
         If Not C Is Nothing Then                  '그림파일과 동일한 이름이 셀에 존재하면
            sAddr = C.Address
             Do
                 ActiveSheet.Pictures.Insert(strPath & fileName).Select  '각 그림파일 삽입
      
                 'Set C = C.Next.MergeArea           '셀병합 셀을 C에 넣음
                With Selection                            '선택된 그림파일
                    .Name = "Temp"                     '복사된 사진의 이름을 변경
                    .ShapeRange.LockAspectRatio = msoFalse  '그림의 가로/세로비율 고정 해제
                    .Height = C.Resize(2, 2).Height                     '그림의 가로크기 지정
                    .Width = C.Resize(2, 2).Width                        '그림의 세로크기 지정
                    
                     .Copy                                   '그림을 복사
                    ActiveSheet.PasteSpecial Link:=False
     
                                                                 '그림 링크깨고 붙여넣기
                    ActiveSheet.Pictures("Temp").Delete '원본 그림파일 삭제
                End With
                 
                 With Selection                            '(복사되어)선택된 그림파일
                    .Left = C.Left                        '그림의 왼쪽위치 지정
                    .Top = C.Top                          '그림의 윗쪽위치 지정
                End With
                 
                 Set C = ActiveSheet.UsedRange.FindNext(C)
             Loop While Not C Is Nothing And C.Address <> sAddr
         End If
         
         fileName = Dir                                 '다음 파일을 파일이름에 넣음
    Loop                                                 '무한 반복
End Sub


==============[이정혜님 글에 대한 답변입니다]==============
......
......
......
Set C = ActiveSheet.UsedRange.Find(strName, ,xlValues, xlWhole) 
=> 현재시트의 Range에서 파일명과 완전히 일치하는 셀를 찾음

If Not C Is Nothing Then       ' 찾는 셀이 존재하면
   sAddr = C.Address            ' 처음 찾은셀의 주소을 임시변수에 넣고
   Do
        ...........
        ...........
        Set C = ActiveSheet.UsedRange.FindNext(C)  ' 다음 셀을 찾고
   Loop While Not C Is Nothing And C.Address <> sAddr
   =>  다음찾는 셀이 존재하고 주소가 임시변수의 주소와 일치하지 않으면 계속 Loop
End If

아마 정확하게 일치 하는 셀을 찾는 것입니다.
해당파일을 첨부하시면 수정해드리지요??
 
[불량 게시물 신고]  
        
  

작성일 : 2018-10-11(14:53)
최종수정일 : 2018-10-11(14:53)
 


 ◎ 관련글

  제 목   작성자   날짜
[RE]이미지 자동 불러오기 VBA 실행 문제 이정혜 2018-10-11
[RE][RE]이미지 자동 불러오기 VBA 실행 문제 dew 2018-10-11

 
 
회사소개 | 이용약관 | 개인정보 처리방침 | 회원정보수정 | 교육신청 및 문의 | 이메일무단수집거부 위로

오피스튜터 블로그 오피스튜터페이스북 오피스튜터유투브
110-722 서울 종로구 세종대로23길 47, 601-74 ㈜오피스튜터 ☎1544-4102 대표이사 : 전경수
개인정보관리책임자 : 이희진(privacy@officetutor.com) 사업자등록번호 120-86-14501
통신판매업신고 2013-서울종로-0547
norton
Copyright ⓒ OfficeTutor.com 이 페이지의 저작권은 ㈜오피스튜터와 콘텐츠 제공자에게 있습니다. 무단 복제를 금합니다.
Microsoft 및 Office 로고는 미국, 대한민국 및/또는 기타 국가에서의 Microsoft Corporation 등록 상표 또는 상표입니다.