2011-10-17 28 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はエラーメッセージのセクションです。次の行へのループを進めるためのカウンタを除いて、すべてうまく動作しますが、動作していないようです。 2行目のエントリをチェックしてループを終了し、コードの次の部分に移動します。私は何か小さな混乱を持っていると確信しています、私はちょうどそれを選ぶように見えることはできません。誰にでもアイデアはありますか?

+1

デバッガでコードをステップ実行しようとしましたか? –

+0

はい。現在、私は2つのデータベースエントリでそれをテストしています。最初のエントリと同じlat/longを持つ3番目のエントリを追加しようとすると、coorAbortエラーメッセージが表示されます。しかし、2番目のエントリと同じ緯度/経度の3番目を追加しようとすると、カウンタは実際に動作し(デバッガでステップ実行します)、if文で比較を行いますが、何らかの理由で互いに等しくなく、ループを通って継続する。 – Brendan

答えて

3

latlonは二重の値ですか?もしそうなら、あなたは

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

(とlonが同じことを行うための)によって

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

を交換する必要があります。等しい値のために直接二重の値をテストしないでください。

+0

あなたは正しい...まあ、ある意味で。 latとlonは文字列であり、問​​題は私のコードには必ずしもありませんでした。 Excelの書式設定では小数点以下が四捨五入されているため、同じ値がExcelに入力されていても、丸められたバージョンは入力バージョンと比較されていました。 – Brendan