Esta inquietud se puede abordar de variadas formas, pero nosotros te compartimos la que en nuestra opinión es la resolución más completa.
Solución:
Obviamente, su problema tiene muchos niveles. Debe comenzar definiendo “conectado a Internet” y continuar con el desarrollo de estrategias alternativas que incluyan no escribir archivos no válidos en caso de falla.
En cuanto a la pregunta “¿Estoy conectado?”, puede intentar acceder a la API de Win32:
Private Declare Function InternetGetConnectedState Lib "wininet.dll" _
(ByRef dwflags As Long, ByVal dwReserved As Long ) As Long
Public Function GetInternetConnectedState() As Boolean
GetInternetConnectedState = InternetGetConnectedState(0&,0&)
End Function
Aunque dependiendo de la configuración de su red (proxy/NAT/restricciones de firewall, etc.), Windows podría tener una opinión diferente a la suya.
Intentar OBTENER las páginas que le interesan, verificar el estado de devolución en los encabezados HTTP (tiempo de espera de la puerta de enlace, 404, lo que sea que espere que suceda cuando “no funcione”) también podría ser una forma de hacerlo.
Podría usar la biblioteca MSXML y usar la clase XMLHttpRequest para verificar cosas
p.ej
On Error Resume Next
Dim request As MSXML2.XMLHTTP60
request.Open "http://www.google.com"
request.Send
Msgbox request.Status
El estado le dará el código de estado HTTP de lo que sucedió con la solicitud. Es posible que deba hacer algunas comprobaciones más, dependiendo de su escenario.
Espero que ayude.
Use el siguiente código para verificar la conexión a Internet primero y anable XML v6.0 en sus referencias
Function checkInternetConnection() As Integer
'code to check for internet connection
'by Daniel Isoje
On Error Resume Next
checkInternetConnection = False
Dim objSvrHTTP As ServerXMLHTTP
Dim varProjectID, varCatID, strT As String
Set objSvrHTTP = New ServerXMLHTTP
objSvrHTTP.Open "GET", "http://www.google.com"
objSvrHTTP.setRequestHeader "Accept", "application/xml"
objSvrHTTP.setRequestHeader "Content-Type", "application/xml"
objSvrHTTP.Send strT
If err = 0 Then
checkInternetConnection = True
Else
MsgBox "Internet connection not estableshed: " & err.Description & "", 64, "Additt !"
End If
End Function
Nos encantaría que puedieras recomendar esta división si lograste el éxito.