Buenos dias a todos, cree el siguiente codigo porque muchos usuarios diferentes trabajan sobre el mismo archivo, y tienen diferentes accesos y conecciones a los discos de la red, de modo que cada que vez que alguien abría el archivo debia modificar todos los vinculos (son como 10) manualmente.
El problema que tengo ahora es que cuando el programa va realizando lo cambios, abre automaticamente varios cuadros de dialogo para seleccionar un archivo que necesita para seguir ejecutandose. Los usuarios le damos cancelar a todos los cuadros de dialogo que aparecen y el codigo sigue su ejecucion normal. Mi consulta es, sabiendo que dando cancelar el programa sigue su ejecucion normal, no puedo bloquear ese cuadro de dialogo emergente y que tome como valor por defecto "Cancel". Les comparto el codigo (el codigo fue tomado de algun foro y modificado a mis necesidades)
Saludos.
Application.ScreenUpdating = False 'Apagar el parpadeo de pantalla evitando los movimientos de pantalla que se producen al seleccionar celdas, hojas y libros
Application.Calculation = xlCalculationManual 'Apagar los cálculos automáticos evitando que se recalcule todo cada vez que se pegan o modifican datos
Application.EnableEvents = False 'Apagar los eventos automáticos evitando que se disparen macros de evento si las hubiere
ActiveSheet.DisplayPageBreaks = False 'Apagar visualización de saltos de página sirve para evitar algunos problemas de compatibilidad entre macros Excel 2003 vs. 2007/2010
Application.DisplayAlerts = False 'Apaga las alertas
ubicacion = ActiveWorkbook.Path 'Traemos la ubicacion actual del archivo
Dim wbTrg As Workbook
Dim sLinkNew As String
Dim aLinks As Variant, vLink As Variant
Set wbTrg = ThisWorkbook 'resume la funcion ThisW.. en wbTrg ..> no se porque
Rem Set array with all excel links
aLinks = ActiveWorkbook.LinkSources(xlExcelLinks) ' define un array con los links del libro
Rem Replace each excel Link
If Not IsEmpty(aLinks) Then 'si el array anterior no esta vacio, entonces...
For Each vLink In aLinks ' para cada link en el array de links, hacer...
texto = Split(vLink, "\") 'obtiene un array de todas las cadenas de texto separadas por la barra invertida, esto es para luego traer la ultima palabra(nombre del archivo) con la funcion Ubound obtiene el mayor indice de un array
If texto(UBound(texto)) = "AtData.xla" Then
'no quiero que haga nada
Else
wbTrg.ChangeLink Name:=vLink, NewName:=ubicacion & "\" & texto(UBound(texto)), Type:=xlExcelLinks
End If
Next: End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.DisplayAlerts = True
Featured Replies
Archivado
Este tema está ahora archivado y está cerrado a más respuestas.
Buenos dias a todos, cree el siguiente codigo porque muchos usuarios diferentes trabajan sobre el mismo archivo, y tienen diferentes accesos y conecciones a los discos de la red, de modo que cada que vez que alguien abría el archivo debia modificar todos los vinculos (son como 10) manualmente.
El problema que tengo ahora es que cuando el programa va realizando lo cambios, abre automaticamente varios cuadros de dialogo para seleccionar un archivo que necesita para seguir ejecutandose. Los usuarios le damos cancelar a todos los cuadros de dialogo que aparecen y el codigo sigue su ejecucion normal. Mi consulta es, sabiendo que dando cancelar el programa sigue su ejecucion normal, no puedo bloquear ese cuadro de dialogo emergente y que tome como valor por defecto "Cancel". Les comparto el codigo (el codigo fue tomado de algun foro y modificado a mis necesidades)
Saludos.
Application.ScreenUpdating = False 'Apagar el parpadeo de pantalla evitando los movimientos de pantalla que se producen al seleccionar celdas, hojas y libros Application.Calculation = xlCalculationManual 'Apagar los cálculos automáticos evitando que se recalcule todo cada vez que se pegan o modifican datos Application.EnableEvents = False 'Apagar los eventos automáticos evitando que se disparen macros de evento si las hubiere ActiveSheet.DisplayPageBreaks = False 'Apagar visualización de saltos de página sirve para evitar algunos problemas de compatibilidad entre macros Excel 2003 vs. 2007/2010 Application.DisplayAlerts = False 'Apaga las alertas ubicacion = ActiveWorkbook.Path 'Traemos la ubicacion actual del archivo Dim wbTrg As Workbook Dim sLinkNew As String Dim aLinks As Variant, vLink As Variant Set wbTrg = ThisWorkbook 'resume la funcion ThisW.. en wbTrg ..> no se porque Rem Set array with all excel links aLinks = ActiveWorkbook.LinkSources(xlExcelLinks) ' define un array con los links del libro Rem Replace each excel Link If Not IsEmpty(aLinks) Then 'si el array anterior no esta vacio, entonces... For Each vLink In aLinks ' para cada link en el array de links, hacer... texto = Split(vLink, "\") 'obtiene un array de todas las cadenas de texto separadas por la barra invertida, esto es para luego traer la ultima palabra(nombre del archivo) con la funcion Ubound obtiene el mayor indice de un array If texto(UBound(texto)) = "AtData.xla" Then 'no quiero que haga nada Else wbTrg.ChangeLink Name:=vLink, NewName:=ubicacion & "\" & texto(UBound(texto)), Type:=xlExcelLinks End If Next: End If Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True ActiveSheet.DisplayPageBreaks = True Application.DisplayAlerts = True