loop - vba code for excel
Cómo suprimir la advertencia Actualizar enlaces? (6)
Abra el Editor de 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 te volverá a preguntar. Recuerde restablecerlo cuando cierre el libro de trabajo, de lo contrario no funcionará para otros libros de trabajo.
ScreenShot :
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
SEGUIR
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
- Crea 2 nuevos archivos.
Sample1.xlsx
ySample1.xlsx
ySample2.xlsx
enC:/
- En la celda
A1
deSample1.xlsx
, escriba esta fórmula=''C:/[Sample2.xlsx]Sheet1''!$A$1
- Guarde y cierre ambos archivos
- Eliminar Sample2.xlsx !!!
- Abra un nuevo libro de trabajo y su módulo pegue este código y ejecute
Sample
. Notará que no recibirá un aviso.
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
Intento escribir un script que abra muchos archivos de Excel. Sigo recibiendo el mensaje:
This workbook contains links to other data sources.
Deseo evitar que aparezca este mensaje, para que mi script pueda pasar automáticamente por todos los libros de trabajo sin tener que hacer clic en Don''t Update
para 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 aún está apareciendo. ¿Cómo puedo suprimirlo?
EDITAR: parece que este mensaje se acerca para los libros que tienen enlaces rotos; No estaba viendo el This workbook contains one or more links that cannot be updated
porque establecí DisplayAlerts
en falso. Los libros de trabajo están vinculados a archivos equivalentes en una carpeta en nuestro servidor de Windows, por lo que cuando se elimina el archivo correspondiente de esa carpeta (que sucede como parte de nuestro flujo de negocios), el enlace se rompe. ¿Es posible suprimir la advertencia cuando el enlace está roto?
Además, estoy usando Excel 2010.
Encontré una solución temporal que al menos me permitirá procesar este trabajo. Escribí un breve script AutoIt que espera que aparezca la ventana "Actualizar enlaces", 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. Realmente me gustaría encontrar una solución que sea completamente VBA, sin embargo, para que pueda hacer que esta sea una aplicación independiente.
Espero dar un aporte adicional para resolver esta pregunta (o parte de ella).
Esto funcionará para abrir un archivo de Excel
de 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 puede verificarse si graba una macro.
En MSDS
, se refiere a MS EXCEL 2010
y 2013
. Estoy pensando que MS EXCEL 2016
tiene esto cubierto también.
Tengo MS EXCEL 2013
, y tengo una situación muy similar a este tema. Así que tengo un archivo (llámalo A
) con el código del evento Workbook_Open
que siempre está bloqueado en el indicador de enlaces de actualización . Tengo otro archivo (llámalo B
) conectado a este, y Pivot Tables me obliga a abrir el archivo A
para que se pueda cargar el modelo de datos. Como quiero abrir el archivo A
silenciosamente en segundo plano, solo uso la línea que escribí arriba, con Windows("A.xlsx").visible = false
, y, aparte de un tiempo de carga mayor, abro el A
archivo del archivo B
sin problemas ni advertencias, y completamente actualizado.
Excel 2016 Tuve un problema similar cuando creé un libro de trabajo / archivo y luego cambié los nombres, pero de alguna manera se mantuvo el nombre anterior del libro de trabajo. Después de mucho googlear ... no encontré ninguna respuesta final allí ...
Vaya a DATOS -> Editar enlace -> Solicitud de inicio (en la parte inferior) Luego elija la mejor opción para usted.
Quise suprimir el mensaje que pregunta si desea actualizar enlaces a otro libro de trabajo cuando mi libro de trabajo se abre manualmente en Excel (en lugar de abrirlo programáticamente a través de VBA). Intenté incluir: Application.AskToUpdateLinks = False
como la primera línea en mi macro Auto_Open()
pero eso no funcionó. Sin embargo, descubrí que si lo coloca en la función Workbook_Open()
en el módulo ThisWorkbook
, funciona de manera brillante: el diálogo se suprime, pero la actualización todavía se produce de forma silenciosa en segundo plano.
Private Sub Workbook_Open()
'' Suppress dialog & update automatically without asking
Application.AskToUpdateLinks = False
End Sub
ACTUALIZAR:
Después de todos los detalles resumidos y discutidos, pasé 2 horas de feria para verificar las opciones, y esta actualización es para marcar todos los puntos.
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 la rutina habitual para mis tareas de prueba diarias, así que tengo muchas de ellas implementadas).
Luego, cambié solo las siguientes opciones de Excel (es decir, todas las demás quedan tal como están después de la instalación):
-
Advanced > General > Ask to update automatic links
marcados :
-
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
Preparé y coloqué en C:/
un libro de trabajo exactamente como las sugerencias de @Siddharth Rout
en su respuesta actualizada (compartida para su conveniencia): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx libro vinculado fue eliminado por lo que ese enlace en el libro compartido no está disponible (seguro).
Apertura manual
El archivo compartido anterior muestra al abrir (con las opciones de Excel mencionadas anteriormente) 2 advertencias, en el orden de aparición:
ADVERTENCIA # 1
Después de hacer clic en Update
, esperaba obtener otro:
ADVERTENCIA # 2
Entonces, supongo que mi entorno de prueba ahora es bastante similar al de OP
) Hasta ahora, bien, finalmente vamos a
Apertura de VBA
Ahora probaré todas las opciones posibles paso por paso para aclarar la imagen. Compartiré únicamente las líneas de código relevantes para simplificar (al final, se compartirá el archivo de muestra completo con el código).
1. Simple Application.Workbooks.Open
Application.Workbooks.Open Filename:="C:/Book1withLinkToBook2.xlsx"
No es sorpresa, 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 la ADVERTENCIA # 1 , y cualquiera de las dos opciones presionadas ( Update
/ Don''t Update
) no produce más advertencias, es decir, Application.DisplayAlerts = False
suprime la ADVERTENCIA # 2 .
3. Application.AskToUpdateLinks = False
Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:/Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True
Enfrente de DisplayAlerts
, este código termina con WARNING # 2 solamente, es decir, Application.AskToUpdateLinks = False
suprime WARNING # 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 con la supresión de 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 @brettdj
ADVERTENCIAS !
Conclusiones
Excepto una buena práctica de prueba y un caso resuelto muy importante (puedo enfrentarme a estos problemas todos los días mientras envío mis libros a terceros, y ahora estoy preparado), se aprendieron dos cosas más:
- Las opciones de Excel sí importan, independientemente de la versión, especialmente cuando llegamos a las soluciones de VBA.
- Cada problema tiene una solución corta y elegante, junto con uno no obvio y complicado. ¡Solo una prueba más para 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 completamente descritos fueron ú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 Excel especificados usando 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