Antecedentes rápidos: casi no tengo experiencia con VBA. Empecé a aprender esto hace dos semanas y he progresado rápidamente, pero me falta mucho conocimiento. No sé lo suficiente para saber lo que no sé, a falta de una palabra mejor. Mis disculpas por adelantado si esta es una pregunta que tiene una solución muy simple. He estado revisando la documentación de VBA de Microsoft sin suerte durante varios días.
El problema: tengo una sola conexión en una hoja de cálculo principal a una hoja de cálculo en SharePoint que extrae datos de las entradas de los operadores en sus teléfonos celulares. La forma actual en que mi código está configurado, actualizará esa conexión antes de ejecutar los cálculos para garantizar que se tengan en cuenta los datos nuevos.
Sin embargo, dado que la ubicación del documento conectado (o incluso el nombre) puede cambiar en el futuro debido a que es un documento compartido, quería encontrar una manera de probar que la conexión era válida; es decir, que el archivo con el nombre correcto existía donde se suponía que debía estar.
Actualmente, si el nombre del archivo o la ubicación no coinciden, Excel arroja un error y mi código dejará de ejecutarse. Idealmente me gustaría tener algo similar a esto:
If connectionIsValid Then Refresh the connection Else MsgBox "Could not refresh connection", vbInformation *Continue with code instead of throwing an error* End IfHe intentado cosas como:
If ActiveWorkbook.Connections(1).OLEDBConnection.IsConnected Then Run Code End IfPero después de leer la documentación, me di cuenta de que lo anterior está relacionado con que la propiedad KeepConnection sea verdadera.
y:
On Error GoTo ErrorHandler *Refresh the sheet* *Continue code* Error Handler: *Don't refresh the sheet* *Continue code*Cualquier ayuda o incluso un puntero en la dirección correcta es muy apreciada. Gracias por tu tiempo.
No estoy seguro de qué está mal con su segunda sugerencia: usar un controlador de errores.
Function checkConnection() On Error GoTo errorHandler ActiveWorkbook.Connections.Item(1).Refresh Exit Function errorHandler: MsgBox "Could not refresh connection. " & Err.Description End Function Acabo de agregar el comando Exit allí; de lo contrario, ejecutará el código en la etiqueta errorHandler cada vez, incluso si no hay un error.