Cribbed a few bits from different sites and hacked them around and came up with this :-

Private Function Geo2PointDistanceFormula2(ByVal Lat1 As Double, ByVal Lon1 As Double, ByVal Lat2 As Double, ByVal Lon2 As Double) As Double

Dim a, b, c As Double

Const PI = 3.14159265358979

Const RadiusEarth = 6371000

' 1 Degree is 69.096 miles, 1 mile is 1609.34 m

a = Cos(Lat1 * PI / 180) * Cos(Lat2 * PI / 180) * Cos(Lon1 * PI / 180) * Cos(Lon2 * PI / 180)

b = Cos(Lat1 * PI / 180) * Sin(Lon1 * PI / 180) * Cos(Lat2 * PI / 180) * Sin(Lon2 * PI / 180)

c = Sin(Lat1 * PI / 180) * Sin(Lat2 * PI / 180)

If (a + b + c) >= 1 Or (a + b + c) <= -1 Then

Return 0

Else

Return Acos(a + b + c) * RadiusEarth * 1.0936 ' Distance will be in yards

End If

end function

Private Function Geo2PointDistanceFormula2(

Dim a, b, c As Double

Const PI = 3.14159265358979

Const RadiusEarth = 6371000

' 1 Degree is 69.096 miles, 1 mile is 1609.34 m

a = Cos(Lat1 * PI / 180) * Cos(Lat2 * PI / 180) * Cos(Lon1 * PI / 180) * Cos(Lon2 * PI / 180)

b = Cos(Lat1 * PI / 180) * Sin(Lon1 * PI / 180) * Cos(Lat2 * PI / 180) * Sin(Lon2 * PI / 180)

c = Sin(Lat1 * PI / 180) * Sin(Lat2 * PI / 180)

If (a + b + c) >= 1 Or (a + b + c) <= -1 Then

Return 0

Else

Return Acos(a + b + c) * RadiusEarth * 1.0936 ' Distance will be in yards

End If

end function