Hola, puedes interceptar el error con "on error goto" o hacerlo ya en una función y te vale para siempre. Te presto ésta que me hice un día y va como un tiro:
Simplemente comprueba si existe ese directorio en esa unidad. Si te devuelve false, no hagas el ChDir, pues cascará.
Un saludo.
Código:
Function ExisteDirectorio(ByVal Directorio As String) As Boolean
'Creada para superar el problema producido cuando en Dir se envía un
'trayecto de red no válido: genera un error 52 (nombre de fichero no válido)
On Error GoTo HayError
Dim AUX As String
'Ya que una carpeta compartida raiz da error, p.e.:
' dir("\\Server\C", vbDirectory) -> Error
' dir("\\Server\C\*.*", vbDirectory) -> Correcto.
If Right(Directorio, 3) = "*.*" Then
'Nada, queda como está
ElseIf Right(Directorio, 1) = "\" Then
AUX = Directorio & "*.*"
Else
AUX = Directorio & "\*.*"
End If
If Dir(AUX, vbDirectory) > vbNullString Then
ExisteDirectorio = True
End If
Exit Function
HayError:
'Nada, simplemente devuelve False.
End Function