Estoy intentando escribir un script que abra muchos archivos de Excel. Sigo recibiendo el mensaje:
This workbook contains links to other data sources.
Quiero evitar que aparezca este mensaje, para que mi script pueda pasar automáticamente por todos los libros de trabajo sin que tenga que hacer clic Don't Updateen cada uno. Actualmente estoy usando lo siguiente:
function getWorkbook(bkPath as string) as workbook
Application.EnableEvents=False
Application.DisplayAlerts=False
getWorkbook=Workbooks.Open(bkPath,updatelinks:=0,readonly:=false)
end function
Sin embargo, el mensaje sigue apareciendo. ¿Cómo puedo suprimirlo?
EDITAR: Parece que este mensaje aparece para libros de trabajo que tienen enlaces rotos; No vi el This workbook contains one or more links that cannot be updatedmensaje porque lo configuré DisplayAlertscomo falso. Los libros de trabajo están vinculados a archivos equivalentes en una carpeta en nuestro servidor de Windows, por lo que cuando el archivo coincidente se elimina de esa carpeta (lo que sucede como parte de nuestro flujo comercial), el vínculo se rompe. ¿Es posible suprimir la advertencia cuando se rompe el enlace?
Además, estoy usando Excel 2010.

Respuestas:
ACTUALIZAR:
Después de todos los detalles resumidos y discutidos, pasé 2 horas revisando las opciones, y esta actualización es para salpicar todos los
is.Preparativos
En primer lugar, realicé una instalación limpia de Office 2010 x86 en la máquina virtual Clean Win7 SP1 Ultimate x64 con tecnología VMWare (esta es una rutina habitual para mis tareas de prueba diarias, por lo que tengo muchas de ellas implementadas).
Luego, cambié solo las siguientes opciones de Excel (es decir, todas las demás se dejan como están después de la instalación):
Advanced > General > Ask to update automatic linkscomprobado :Trust Center > Trust Center Settings... > External Content > Enable All...(aunque el que se relaciona con las conexiones de datos probablemente no sea importante para el caso):Condiciones previas
Lo preparé y lo coloqué en
C:\un libro de trabajo exactamente según las@Siddharth Routsugerencias en su respuesta actualizada (compartida para su conveniencia): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx El libro vinculado se eliminó para que el enlace en el compartido el libro no está disponible (seguro).Apertura manual
El archivo compartido anterior se muestra al abrir (con las opciones de Excel enumeradas anteriormente) 2 advertencias, en el orden de aparición:
ADVERTENCIA # 1
Después de hacer clic en
Update, esperaba otro:ADVERTENCIA # 2
Entonces, supongo que mi entorno de prueba ahora es bastante similar al
OPde) Hasta ahora todo bien, finalmente vamos aApertura de VBA
Ahora probaré todas las opciones posibles paso a paso para aclarar la imagen. Compartiré solo las líneas de código relevantes para simplificar (el archivo de muestra completo con el código se compartirá al final).
1. Aplicación simple. Libros de trabajo. Abierto
No es de extrañar: esto produce AMBAS advertencias, como para la apertura manual anterior.
2. Application.DisplayAlerts = False
Este código termina con ADVERTENCIA # 1 , y cualquiera de las opciones que se hace clic (
Update/Don't Update) NO produce más advertencias, es decir,Application.DisplayAlerts = Falsesuprime la ADVERTENCIA # 2 .3. Application.AskToUpdateLinks = False
En oposición a
DisplayAlerts, este código termina con la ADVERTENCIA # 2 solamente, es decir,Application.AskToUpdateLinks = Falsesuprime la ADVERTENCIA # 1 .4. Doble falso
Aparentemente, este código termina suprimiendo AMBAS ADVERTENCIAS .
5. UpdateLinks: = False
Finalmente, esta solución de 1 línea (propuesta originalmente por
@brettdj) funciona de la misma manera que Double False: ¡ NO se muestran ADVERTENCIAS !Conclusiones
Excepto una buena práctica de prueba y un caso resuelto muy importante (puedo enfrentar estos problemas todos los días mientras envío mis libros de trabajo a un tercero, y ahora estoy preparado), aprendí 2 cosas más:
Muchas gracias a todos los que contribuyeron a la solución, y especialmente a OP que planteó la pregunta. Espero que mis investigaciones y los pasos de prueba descritos a fondo hayan sido útiles no solo para mí)
Se comparte el archivo de muestra con los ejemplos de código anteriores (muchas líneas se comentan deliberadamente): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
Respuesta original (probado para Excel 2007 con ciertas opciones):
Este código funciona bien para mí: recorre TODOS los archivos de Excel especificados con comodines en
InputFolder:Lo probé con libros con enlaces externos no disponibles, sin advertencias.
Archivo de muestra: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
fuente
Application.DisplayAlerts = Falseno desactivará esas advertencias :)?Application.AskToUpdateLinksla ventana Inmediato. ¿Ya está configurado como falso o es cierto ...?Abra el Editor VBA de Excel y escriba esto en la ventana Inmediato (ver captura de pantalla)
Cierre Excel y luego abra su archivo. No volverá a avisarle. Recuerde restablecerlo cuando cierre el libro de trabajo; de lo contrario, tampoco funcionará para otros libros de trabajo.
Captura de pantalla :
EDITAR
Entonces, aplicándolo a su código, su código se verá así
SEGUIMIENTO
Sigil, el siguiente código también funciona en archivos con enlaces rotos. Aquí está mi código de prueba.
Condiciónes de la prueba
Sample1.xlsxySample2.xlsxy guardarlos enC:\A1deSample1.xlsx, escriba esta fórmula='C:\[Sample2.xlsx]Sheet1'!$A$1Sample. Notará que no recibirá un mensaje.Código
fuente
Application.DisplayAlerts = Falsese agrega?Excel 2016 Tuve un problema similar cuando creé un libro / archivo y luego cambié los nombres, pero de alguna manera se mantuvo el nombre del libro anterior. Después de mucho buscar en Google ... bueno, no encontré ninguna respuesta final allí ...
Vaya a DATOS -> Editar enlace -> Mensaje de inicio (en la parte inferior) Luego elija la mejor opción para usted.
fuente
Quería suprimir el mensaje que pregunta si desea actualizar los enlaces a otro libro cuando mi libro se abre manualmente en Excel (en lugar de abrirlo mediante programación a través de VBA). Intenté incluir:
Application.AskToUpdateLinks = Falsecomo primera línea en miAuto_Open()macro pero no funcionó. Sin embargo, descubrí que si lo pones en laWorkbook_Open()función delThisWorkbookmódulo, funciona de manera brillante: el cuadro de diálogo se suprime pero la actualización aún se produce silenciosamente en segundo plano.fuente
Workbook_Open()evento para cada uno de los libros de trabajo en mi conjunto de objetivos.(No tengo suficientes puntos de repetición para agregar un comentario, pero quiero agregar algo de claridad a las respuestas aquí)
Application.AskToUpdateLinks = False probablemente no es lo que desea.
Si se establece en False, MS Excel va a tratar de actualizar los enlaces automáticamente simplemente no le pedirá al usuario de antemano, sorta contrario a la intuición.
La solución correcta, si está buscando abrir un archivo sin actualizar los enlaces debería ser:
Workbook.Open (UpdateLinks: = 0)
Enlace relacionado: Diferencia en AskToUpdateLinks = False y UpdateLinks: = 0
fuente
Encontré una solución temporal que al menos me permitirá procesar este trabajo. Escribí un breve script de AutoIt que espera a que aparezca la ventana "Actualizar enlaces" y luego hace clic en el botón "No actualizar". El código es el siguiente:
Hasta ahora esto parece estar funcionando. Sin embargo, realmente me gustaría encontrar una solución que sea completamente VBA, para poder hacer de esta una aplicación independiente.
fuente
Espero dar alguna información adicional para resolver esta pregunta (o parte de ella).
Esto funcionará para abrir un
Excelarchivo desde otro. Una línea de código del Sr. Peter L. , para el cambio, use lo siguiente:Esto está en
MSDS. El efecto es que simplemente actualiza todo (sí, todo) sin previo aviso. Esto también se puede comprobar si graba una macro.En
MSDS, se refiere a estoMS EXCEL 2010y2013. Creo que eso también loMS EXCEL 2016tiene cubierto.Tengo
MS EXCEL 2013y tengo una situación muy parecida a la de este tema. Así que tengo un archivo (llámaloA) conWorkbook_Opencódigo de evento que siempre se atasca en el indicador de enlaces de actualización . Tengo otro archivo (llámaloB) conectado a este, y las tablas dinámicas me obligan a abrir el archivoApara que se pueda cargar el modelo de datos. Como quiero abrir elAarchivo silenciosamente en segundo plano, solo uso la línea que escribí arriba, con unWindows("A.xlsx").visible = false, y, además de un mayor tiempo de carga, abro elAarchivo desde elBarchivo sin problemas ni advertencias, y completamente actualizado .fuente