while loop for code excel vba excel-vba

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

  1. Crea 2 nuevos archivos. Sample1.xlsx y Sample1.xlsx y Sample2.xlsx en C:/
  2. En la celda A1 de 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 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:

  1. Las opciones de Excel sí importan, independientemente de la versión, especialmente cuando llegamos a las soluciones de VBA.
  2. 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