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

작성자:  

 김영진 (snakesolid)

추천:  2
파일:     제목 없음(64).jpg (95.3KB) 조회:  14079
제목:   런타임 13에러가 계속 발생합니다.
     
 
Private Sub Worksheet_Calculate()
   
   Static a0 As Variant
   Static b0 As Variant
   
                        '직전에 비교수행 완료한 A1 셀의 값을 저장
   Dim a2 As Variant
   Dim a11 As Variant
   
   
   Dim r As Long
                   ' 반복루프를 위한 행번호

   a2 = Range("A2").Value
   a11 = Range("A11").Value
                           '비교 식을 간단히 쓰기 위해 변수에 저장
   
   If a2 > a0 Then
                      ' A1 셀의 값이 바뀐 경우에만 비교 카운트 수행


DDE켜놓고 엑셀파일 실행하면 런타임13에러가뜨고 디버그 누르면
가장 마지막줄 If a2 > a0 Then 에 노란에러가 뜨네요
수식문제라고 보면 ><= 말고는 없는데 하나씩 넣던가 전부 넣어도 
런타임13 에러가 뜹니다;;;
혹시 맨처음 프로그램을 실행할때 a0에는 아무런 값이 없는 상태기 때문인가요?

 
[불량 게시물 신고]  
조삿갓그냥 런타임 13 오류라고 하면 아주 전문가가 아닌 이상 무슨 오류인지 잘 모릅니다.
디버그 창에서 ? error(13)
해서 확인하면 "형식이 일치하지 않습니다"

이 오류는 노란 띠가 있는 명령이 원인이 아니고(발생 지점일 뿐)
원인은 그 앞 부분에서 찾아야 합니다.

비교연산자 >은 양변에 비교대상 수식이
"형식(Type)이 일치해야 합니다"
즉, 수치데이터끼리, 문자열데이터끼리만 비교가 가능하고
"123" > 456
과 같이 문자열데이터와 수치데이터를 바로 비교하려고 했을 때 발생하는 오류가 13 오류이지요.

짐작하신대로 어느 한 쪽이 빈 셀이거나, 연산오류(#DIV/0!
 등)가 발생한 셀인 경우에도 동일한 오류가 발생합니다.
05-10 (09:25)
삭제 ■신고
조삿갓만일 해당 셀에 저장될 수 있는 데이터가 반드시 문자열만이거나 수치만이라는 조건이 있다면
a0와 a11의 선언을 Variant로 하지 마시고
Double, String 등으로 선언하실 것을 권해드립니다.
그러면 오류 발생 지점과 원인 지점이 동일하게 되어서
디버깅하기가 수월해집니다.
05-10 (09:29)
삭제 ■신고
조삿갓빈 셀이거나 오류 셀일 경우 비교를 건너뛰는 요령
(단, 이렇게 하려면 a2는 Variant 형이어야 함)

If IsEmpty(a2) or IsError(a2) Then
  ' 예외 처리: 오류메시지 출력 등
  ' 특별히 예외처리하지 않고 무시만 하려면
  ' 이 블록은 그냥 비워두면 됨
Else
  ' 정상 처리
  If a2 > a0 Then

End If

마찬가지 요령으로 TypeName(a2)를 미리 조사하여 형식 불일치 오류의 발생을 미리 막는 방법을 쓸 수도 있습니다. 잘 응용해 보시기 바랍니다.
05-10 (09:45)
삭제 ■신고
김영진감사합니다 여러가지 가능성을 두고 설명해주셔서 혼자 생각하면서 연구해볼수 있겠네요05-10 (16:04)
삭제 ■신고
        
  

작성일 : 2018-05-09(22:12)
최종수정일 : 2018-05-09(22:12)