2011-10-17 48 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