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

 조삿갓 (choga21)

추천:  2
파일:     자동임력폼버전[2].xlsm (90.2KB) 조회:  9444
제목:   [RE]선배님들....자꾸 개체가필요하다며 런타임 오류가 납니다 ㅜㅜ
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(2010):

* 아래줄에 질문을 작성하세요 >> 자료시트에 있는 데이터를 검색폼으로 검색한 후 추가 하는 매크로를 작성하고 있습니다.
코드를 이해하면서 하나하나씩 원리는 이해를 했는데 도무지 오류가 잡히지가 않습니다....리스트 채우는과정에서 자꾸 컴파일 오류가 뜨는데 선배님들의 도움이 필요합니다!!
==============[흐구흐규님 글에 대한 답변입니다]==============

디버깅한 파일을 첨부하긴 합니다만
그 파일을 열기 전에
먼저 아래 설명을 읽어보고 질문자님의 원본 파일을 수정해 보시기 바랍니다.

그래야 확실한 공부가 되고
다음에 똑같은 실수를 하지 않게될테니까요.

세 가지 오류가 있네요.


1) 사용자정의 폼의 초기화 명령들을 UserForm_Initialize 핸들러 안에 두게 되면,
   실행 오류가 발생했을 때 실제 오류가 발생한 명령문을 가리키는 게 아니고
   사용자정의폼을 호출하는 Show 메소드에서 노란 띠가 멈추게 되지요.
   이는 특히 초보자들을 완전히 헤매게 만듭니다.
   어디에서 오류가 발생했는지 전혀 알 수 없기 때문입니다.

해결) 초기화 루틴을 UserForm_Initialize 대신 UserForm_Activate 핸들러 안에 두면
      실행 오류가 발생했을 때 실제로 오류가 발생한 장소를 비교적 정확히 가리키게 됩니다.
      특별한 이유가 없다면 UserForm_Activate 핸들러를 사용하세요.
      즉, UserForm_Initialize 를 UserForm_Activate로 수정하세요.

그리고 나서 다시 실행해 보면

2) "개체가 필요하다"는 오류가 실제로 발생한 위치는 
   Call 리스트채우기(리스트, rng2, Array(0, 1, 2)) 명령입니다.
원인2-1) rng2라는 Range형 변수가 선언된 곳도 없고, 값이 할당된 곳도 없습니다.
      코드를 좀 더 자세히 분석해 보면 '범위갱신'이라는 프로시저에서
      rng2에 범위를 할당하긴 하지만, 여기서도 선언이 없이
      뜬금없는 변수들이 등장합니다.

      코드를 좀 더 분석해 보면
원인2-2) UserForm_Click 이벤트 핸들러 안에 있는 명령어들이
         단순히 변수 선언문만 나열되어 있습니다.
         아마도 전역변수를 선언한 것 같은데, 이렇게 하시면 아니되옵니다.
         이렇게 프로시저 안에서 선언하는 변수를 지역변수라고 하는데
         이 변수들은 End Sub 명령을 만나는 순간 그 역할을 다하고
         사망합니다. 다른 프로시저에서는 그 값을 참조할 수 없습니다.
         프로시저의 경계를 넘어서 값을 보존하고 참조할 수 있는 변수를
         전역변수라고 합니다.
해결) 전역변수의 선언은 폼 모듈의 첫 부분에
      프로시저의 바깥쪽에 선언해야 합니다.
      즉, Private Sub UserForm_Click() 맨 첫 줄과
      이것과 짝이 되는 End Sub 문은 완전히 사족이므로
      삭제해야 합니다.


3) Sub 범위갱신()에서
   "개체 변수 또는 With 문의 변수가 설정되어 있지 않습니다" 오류 발생
원인) Range 형의 변수에 범위를 할달할 때에는 Set 명령을 사용해야 합니다.
해결) Set rng1 = Sheet4.Range("B2", "B1665")
      물론 그 아래에 rng2, rng3 등도 마찬가지 방법으로 수정해야 합니다.
 
[불량 게시물 신고]  
        
  

작성일 : 2018-06-24(23:21)
최종수정일 : 2018-06-24(23:21)
 


 ◎ 관련글

  제 목   작성자   날짜
선배님들....자꾸 개체가필요하다며 런타임 오류가 납니다 ㅜㅜ 흐구흐규 2018-06-24
[RE]선배님들....자꾸 개체가필요하다며 런타임 오류가 납니다 ㅜㅜ 조삿갓 2018-06-24