Here’s a script that helps to export KML files for Google Earth from Access tables. The idea is that you create a query with columns named “Latitude” and “Longitude” and any other columns you need. Open that query, and pass the recordset to this dumper. You also specify a file name, and a list of columns to use for the name and definition fields.
The example is the testKML subroutine.
' rs is a regular recordset. It must have a column named "Latitude" and another "Longitude".
' cols is a string with comma-separated column names that will be exported with the data.
' The first column is the title, and the rest form the description.
' http://code.google.com/apis/kml/documentation/
'<?xml version="1.0" encoding="UTF-8"?>
'<kml xmlns="http://www.opengis.net/kml/2.2">
' <Placemark>
' <name>Simple placemark</name>
' <description>Attached to the ground. Intelligently places itself
' at the height of the underlying terrain.</description>
' <Point>
' <coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
' </Point>
' </Placemark>
'</kml>
Sub MakeKMLFromRecordset(ByVal fn As String, rs As Recordset, cols As String)
Dim columns As Variant
columns = Split(cols, ",")
out = ""
rs.MoveFirst
While (Not rs.EOF)
out = out & "<Placemark>"
out = out & "<name>" & XMLEscape(rs.Fields(columns(0))) & "</name>"
Description = ""
For i = 1 To UBound(columns)
Description = Description & rs.Fields(columns(i)) & " "
Next i
out = out & "<description>" & XMLEscape(Description) & "</description>"
Point = "<coordinates>" & rs.Fields("Longitude") & "," & rs.Fields("Latitude") & "</coordinates>"
out = out & "<Point>" & Point & "</Point>"
out = out & "</Placemark>" & vbCrLf
rs.MoveNext
Wend
out = "<kml xmlns=""http://www.opengis.net/kml/2.2""><Document>" & vbCrLf & out & "</Document></kml>"
out = "<?xml version=""1.0"" encoding=""UTF-8""?>" & vbCrLf & out
filenum = FreeFile()
Open fn For Output As filenum
Print #filenum, out
Close #filenum
End Sub
Public Function XMLEscape(ByVal XMLin As String) As String
' http://miketurco.com/ms-access-vba-add-xml-escape-codes-102207
' replaces & " ' < and > with escape codes
Dim g$
g = XMLin
g = Replace(g, "&", "&")
g = Replace(g, Chr(34), """)
g = Replace(g, "'", "'")
g = Replace(g, "<", "<")
g = Replace(g, ">", ">")
XMLEscape = g
End Function
Sub testKML()
Dim db As DAO.Database
Set db = CurrentDb()
Dim rs As DAO.Recordset
qry = "qry Users with LatLon"
Set rs = db.OpenRecordset(qry)
filename = cmdExtFileDialog("kml")
MakeKMLFromRecordset filename, rs, "OrgName,ACode,Phone"
End Sub
And here’s the code for the file dialog box helper.
Function cmdExtFileDialog(ext As String) As String
'Requires reference to Microsoft Office 10.0 Object Library.
Dim fDialog As Office.FileDialog
Dim fDialogFilter As Office.FileDialogFilter
Dim varFile As Variant
Dim path As String
Dim filename As String
'Set up the File Dialog.
Set fDialog = Application.FileDialog(msoFileDialogSaveAs)
With fDialog
.AllowMultiSelect = False
.title = "Save As " & UCase(ext) & " File..."
If .Show = True Then
path = .InitialFileName
filename = .SelectedItems.Item(1)
If (LCase(Right(filename, 4)) <> "." & LCase(ext)) Then filename = filename & "." & ext
cmdExtFileDialog = filename
Exit Function
Else
Exit Function
End If
End With
End Function