Como bien dice el refran, si quieres que algo salga bien, hazlo tu mismo ... bueno ahora que pienso NIKE tambien lo dice (just do it) pero eso es otra historia.
Bueno al tema, os adjunto el código por si otro principiante como yo en esta materia le surge el mismo problema.
El ejemplo es sobre una bbdd SQL Server, así que si el origen de datos es otro diferente, sólo tenéis que cambiar la cadena de conexión ... y puede que alguna cosita más, pero seguro que poco.
Aquí va
Dim cnn As new ADODB.Connection
Dim cmd As new ADODB.Command
Dim rs As new ADODB.Recordset
cnn.Provider = "sqloledb"
cnn.Open "Data Source=MiServidor; Initial Catalog=MiBBDD; " & _
"user id=MiUsuario;password=MiPassword"
If cnn.State = adStateOpen Then
Set rs = cnn.Execute("select * from envios")
If rs.State = adStateOpen Then
Dim lfile As Long, lField As Long
lfile = FreeFile
Open App.Path & "\envios.xml" For Output As #lfile
Print #lfile, "<root>"
While Not rs.EOF
Print #lfile, "<envio>"
For lField = 0 To rs.Fields.Count - 1
Print #lfile, "<" & rs.Fields(lField).Name & ">" & _
rs.Fields(lField).Value & _
"</" & rs.Fields(lField).Name & ">"
Next lField
Print #lfile, "</envio>"
rs.MoveNext
Wend
Print #lfile, "</root>"
rs.Close
Close #lfile
End If
Set rs = Nothing
cnn.Close
End If
Set cnn = Nothing
Un saludo y esto es todo amigos