2011-10-17 65 views
0

我正在寫一些宏的Excel工作表,將添加點到數據庫。這些條目的經緯度值必須是唯一的,所以我添加了幾行代碼,用於在用戶嘗試輸入條目後檢查條目的緯度/經度。它旨在檢查數據庫中所有數據的未決條目的緯度/經度。如果它匹配,它將返回一個錯誤。下面是代碼:與excel數據庫的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是行計數器,LAT和經度是緯度/經度真實由用戶輸入,並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這樣做)。切勿直接爲平等測試雙值。

+0

你是對的......好吧,從某種意義上說。 lat和lon是字符串,問題不在我的代碼中,必然。 Excel中的格式化是小數點後的四捨五入,所以即使相同的值被輸入到excel中,也會將四捨五入的版本與輸入版本進行比較。 – Brendan