¿Cómo suprimir la advertencia de Update Links?

109

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.

sigilo
fuente
1
De la discusión con @SiddharthRout, vemos ahora que la causa son diferentes configuraciones para diferentes versiones de Excel: lo más probable es que use Excel 2010 o posterior (Siddharth Rout también tiene 2010), mientras que yo estoy usando 2007 y no veo ninguna advertencia si hay enlaces están bien. Realizaremos algunas investigaciones más y volveremos con la solución de trabajo, eso espero) Ahora intente la respuesta de Siddharth Rout.
Peter L.
2
¡Mi voto a favor por un caso muy interesante!
Peter L.
@PeterL. dado que no obtiene los enlaces de actualización incluso cuando abre el archivo manualmente, supongo que hay una configuración que me falta en alguna parte. Déjeme probarlo en Excel 2007 antes de confirmarlo. :)
Siddharth Rout
¿Puede publicar una muestra de un archivo problemático? Sería bueno ver la naturaleza de los enlaces
brettdj
@brettdj, es propietario, así que no puedo publicar un archivo completo. Investigaré los enlaces para ver si hay algún problema con ellos.
sigilo

Respuestas:

139

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 links comprobado :

Solicitar actualizar enlaces automáticos

  • 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):

Contenido externo

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

Este libro contiene enlaces a otras fuentes de datos

Después de hacer clic en Update, esperaba otro:

ADVERTENCIA # 2

Este libro contiene uno o más enlaces que no se pueden actualizar

Entonces, supongo que mi entorno de prueba ahora es bastante similar al OPde) Hasta ahora todo bien, finalmente vamos a

Apertura 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

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"

No es de extrañar: esto produce AMBAS advertencias, como para la apertura manual anterior.

2. Application.DisplayAlerts = False

Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True

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

Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True

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

Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True

Aparentemente, este código termina suprimiendo AMBAS ADVERTENCIAS .

5. UpdateLinks: = False

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", 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:

  1. Las opciones de Excel SI importan, independientemente de la versión, especialmente cuando hablamos de soluciones VBA.
  2. Cada problema tiene una solución corta y elegante, junto con una no obvia y complicada. ¡Solo una prueba más de eso!)

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:

Sub WorkbookOpening2007()

Dim InputFolder As String
Dim LoopFileNameExt As String

InputFolder = "D:\DOCUMENTS\" 'Trailing "\" is required!

LoopFileNameExt = Dir(InputFolder & "*.xls?")
Do While LoopFileNameExt <> ""

Application.DisplayAlerts = False
Application.Workbooks.Open (InputFolder & LoopFileNameExt)
Application.DisplayAlerts = True

LoopFileNameExt = Dir
Loop

End Sub

Lo probé con libros con enlaces externos no disponibles, sin advertencias.

Archivo de muestra: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm

Peter L.
fuente
6
Application.DisplayAlerts = Falseno desactivará esas advertencias :)
Siddharth Rout
@SiddharthRout Sid Juro que no los veo: tengo un archivo con esos enlaces y veo la advertencia mientras lo abro manualmente. Con el script anterior - sin advertencias) Puede compartir video para usted))) Excel 2007 - por si acaso.
Peter L.
Ok, intente esto :) Abra dos nuevos libros de trabajo. Guárdelos como book1.xlsx y book2.xlsx. En la celda A1 del libro1, escriba "=" y apúntelo a la celda A1 del libro2. Escriba algo en la celda A1 del Libro2 si lo desea y luego cierre ambos libros. Ahora abra book1 con su código y verá que todavía recibe el mensaje :)
Siddharth Rout
Además, antes de ejecutar el ejercicio anterior, consulte ?Application.AskToUpdateLinksla ventana Inmediato. ¿Ya está configurado como falso o es cierto ...?
Siddharth Rout
2
+1 para brettdj. Sus clientes deben estar contentos si todos sus informes son similares)
Ksenia
22

Abra el Editor VBA de Excel y escriba esto en la ventana Inmediato (ver captura de pantalla)

Application.AskToUpdateLinks = False 

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 :

ingrese la descripción de la imagen aquí

EDITAR

Entonces, aplicándolo a su código, su código se verá así

Function getWorkbook(bkPath As String) As Workbook
    Application.AskToUpdateLinks = False
    Set getWorkbook = Workbooks.Open(bkPath, False)
    Application.AskToUpdateLinks = True
End Function

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

  1. Crea 2 archivos nuevos. Nombrarlos Sample1.xlsxy Sample2.xlsxy guardarlos enC:\
  2. En la celda A1de Sample1.xlsx, escriba esta fórmula='C:\[Sample2.xlsx]Sheet1'!$A$1
  3. Guarde y cierre ambos archivos
  4. Eliminar Sample2.xlsx !!!
  5. Abra un nuevo libro de trabajo y su módulo pegue este código y ejecútelo Sample. Notará que no recibirá un mensaje.

Código

Option Explicit

Sub Sample()
    getWorkbook "c:\Sample1.xlsx"
End Sub

Function getWorkbook(bkPath As String) As Workbook
    Application.AskToUpdateLinks = False
    Set getWorkbook = Workbooks.Open(bkPath, False)
    Application.AskToUpdateLinks = True
End Function
Huida de Siddharth
fuente
3
Ese código funcionó para mí, Sid ( en xl2010 ), ya que deshabilitó el mensaje, pero actualizó el enlace en segundo plano. El uso de `Set getWorkbook = Workbooks.Open (bkPath, False)` suprimirá la advertencia y no impulsará la actualización. Sobre las pruebas xl03 y xl10
brettdj
1
Gracias Dave. :) Por cierto, supongo que te refieres a xl03 y xl2007: P También edité la publicación anterior para reflejar tu sugerencia.
Siddharth Rout
1
@brettdj ¡muchas gracias! Pasamos una buena hora con Sid esa mañana tratando de resolver el caso. Entonces, ¿el código anterior suprimirá todas las advertencias para cualquier versión de Excel y hará que los enlaces se actualicen silenciosamente? ¿Y cómo debo modificar el código para EVITAR la actualización? Lo siento, estoy un poco perdido en las opciones, pero espero haberlo explicado todo correctamente)
Peter L.
@brettdj y ¿qué será si también Application.DisplayAlerts = Falsese agrega?
Peter L.
1
@sigil: Sin ver su libro de trabajo, no podré comentar más. Probé mi código con diferentes condiciones y funciona perfectamente. De hecho, es la forma correcta de suprimir esas alertas ...
Siddharth Rout
6

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.

usuario2060451
fuente
3
Esta es la mejor solución. Solo afecta al libro de trabajo para el que se realizó esta elección y no requiere ningún VBA.
Gaia
5

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 mi Auto_Open()macro pero no funcionó. Sin embargo, descubrí que si lo pones en la Workbook_Open()función del ThisWorkbookmódulo, funciona de manera brillante: el cuadro de diálogo se suprime pero la actualización aún se produce silenciosamente en segundo plano.

 Private Sub Workbook_Open()
    ' Suppress dialog & update automatically without asking
    Application.AskToUpdateLinks = False
End Sub
Renwick Wright
fuente
Buena idea; desafortunadamente, este proyecto requirió que abriera un conjunto de libros de trabajo cuyo contenido no pude modificar. Por lo tanto, no habría forma de configurar el Workbook_Open()evento para cada uno de los libros de trabajo en mi conjunto de objetivos.
sigilo
3

(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

Donaldo Almazan
fuente
2

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:

while 1
if winexists("Microsoft Excel","This workbook contains links to other data sources.") Then
   controlclick("Microsoft Excel","This workbook contains links to other data sources.",2)
EndIf
WEnd

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.

sigilo
fuente
2

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:

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=3

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 esto MS EXCEL 2010y 2013. Creo que eso también lo MS EXCEL 2016tiene cubierto.

Tengo MS EXCEL 2013y tengo una situación muy parecida a la de este tema. Así que tengo un archivo (llámalo A) con Workbook_Opencódigo de evento que siempre se atasca en el indicador de enlaces de actualización . Tengo otro archivo (llámalo B) conectado a este, y las tablas dinámicas me obligan a abrir el archivo Apara que se pueda cargar el modelo de datos. Como quiero abrir el Aarchivo silenciosamente en segundo plano, solo uso la línea que escribí arriba, con un Windows("A.xlsx").visible = false, y, además de un mayor tiempo de carga, abro el Aarchivo desde el Barchivo sin problemas ni advertencias, y completamente actualizado .

JDF
fuente