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 Update
en 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 updated
mensaje porque lo configuré DisplayAlerts
como 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
i
s.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 links
comprobado :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 Rout
sugerencias 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
OP
de) 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 = False
suprime 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 = False
suprime 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 = False
no desactivará esas advertencias :)?Application.AskToUpdateLinks
la 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.xlsx
ySample2.xlsx
y guardarlos enC:\
A1
deSample1.xlsx
, escriba esta fórmula='C:\[Sample2.xlsx]Sheet1'!$A$1
Sample
. Notará que no recibirá un mensaje.Código
fuente
Application.DisplayAlerts = False
se 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 = False
como primera línea en miAuto_Open()
macro pero no funcionó. Sin embargo, descubrí que si lo pones en laWorkbook_Open()
función delThisWorkbook
mó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
Excel
archivo 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 2010
y2013
. Creo que eso también loMS EXCEL 2016
tiene cubierto.Tengo
MS EXCEL 2013
y tengo una situación muy parecida a la de este tema. Así que tengo un archivo (llámaloA
) conWorkbook_Open
có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 archivoA
para que se pueda cargar el modelo de datos. Como quiero abrir elA
archivo 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 elA
archivo desde elB
archivo sin problemas ni advertencias, y completamente actualizado .fuente