2011-10-17 5 views
0

데이터베이스에 포인트를 추가하는 엑셀 워크 시트에 대한 매크로를 작성하고 있습니다. 항목은 위도와 경도 값과 관련하여 고유해야하므로 사용자가 항목을 입력하려고 시도한 후 항목의 위도/경도를 확인할 수있는 몇 줄의 코드를 추가했습니다. 보류중인 항목의 위도/경도를 데이터베이스의 모든 항목과 비교하여 검사합니다. 일치하는 경우 오류를 반환합니다. 여기서 코드 :엑셀 데이터베이스가있는 VBA 카운터

x = 2 
Do Until (Worksheets("DBase").Cells(x, 3).Value = "") 
    If Worksheets("DBase").Cells(x, 3).Value = lat And Worksheets("DBase").Cells(x, 
4).Value = lon Then 
      GoTo coorAbort 
    Else 
      x = x + 1 
    End If 
Loop 

X는 행 카운터, 위도 및 경도가 인/위도 오랫동안있어 사용자에 의해 입력하고, coorAbort 오류 메시지와 단면도이다. 루프를 다음 행으로 진행하기위한 카운터를 제외한 모든 것이 제대로 작동하지 않습니다. 두 번째 행 항목을 확인한 다음 루프를 종료하고 코드의 다음 부분으로 이동합니다. 나는 작은 무언가를 엉망으로 만들 것이라고 확신한다. 나는 그것을 꺼내는 것처럼 보이지 않는다. 누구든지 아이디어가 있습니까?

+1

디버거로 코드를 실행 해 보셨습니까? –

+0

예. 현재 나는 단지 두 개의 데이터베이스 항목으로 테스트하고 있습니다. 첫 번째 항목과 동일한 위도/경도를 사용하여 세 번째 항목을 추가하려고하면 coorAbort 오류 메시지가 표시됩니다. 그러나 두 번째 항목과 동일한 위도/경도를 가진 세 번째를 추가하려고하면 카운터가 실제로 작동하고 (디버거를 통해 단계별로 실행) if 문에서 비교를 수행하지만 어떤 이유로 인해 서로 같지 않고 루프를 계속 진행합니다. – Brendan

답변

3

latlon은 이중 값입니까? 그렇다면, 당신은

If Abs(Worksheets("DBase").Cells(x, 3).Value - lat)<1e-6 

에 의해

If Worksheets("DBase").Cells(x, 3).Value = lat 

를 교체해야합니다 (그리고 lon에 대해 동일한 작업을 수행). 평등을 위해 double 값을 직접 테스트하지 마십시오.

+0

당신 말이 맞습니다 ... 음, 어떤 의미에서. lat와 lon은 문자열이었고 문제는 필자의 코드에서 발견되지 않았습니다. Excel에서 서식을 지정하면 소수 자릿수가 반올림되므로 동일한 값이 Excel에 입력 되어도 반올림 된 버전이 입력 버전과 비교되었습니다. – Brendan