[Excel VBA] Reemplazar hoja por otra
grotone
Mensajes publicados
14
Fecha de registro
Estado
Miembro
-
plop -
plop -
Bonjour,
Tengo 2 archivos de Excel diferentes y estoy buscando reemplazar una hoja de uno de los libros por una del segundo libro.
Workbooks(1).Sheets(ActiveSheet.Name).Delete
Workbooks(2).ActiveSheet.Copy after:=Workbooks(1).Sheets("Navigation")
En resumen, borro la hoja del libro 1 (llamémosla Hoja1, y después busco la misma hoja (con el mismo nombre, Hoja1 y el mismo formato) en el libro 2 y la copio en el libro 1.
Todo iría bien en el mejor de los mundos, pero resulta que en el libro 1 tengo otra hoja (digamos "Resumen") que depende de valores en la hoja que estoy tratando de reemplazar, y cuando realizo mi reemplazo, los enlaces en esa hoja se "rompen", aunque las 2 hojas (Hoja1 de los 2 libros) son idénticas.
¿Cómo puedo realizar mi reemplazo de Hoja1, asegurándome de que los enlaces de Resumen no se "rompan"?
Gracias de antemano
Grotone
Tengo 2 archivos de Excel diferentes y estoy buscando reemplazar una hoja de uno de los libros por una del segundo libro.
Workbooks(1).Sheets(ActiveSheet.Name).Delete
Workbooks(2).ActiveSheet.Copy after:=Workbooks(1).Sheets("Navigation")
En resumen, borro la hoja del libro 1 (llamémosla Hoja1, y después busco la misma hoja (con el mismo nombre, Hoja1 y el mismo formato) en el libro 2 y la copio en el libro 1.
Todo iría bien en el mejor de los mundos, pero resulta que en el libro 1 tengo otra hoja (digamos "Resumen") que depende de valores en la hoja que estoy tratando de reemplazar, y cuando realizo mi reemplazo, los enlaces en esa hoja se "rompen", aunque las 2 hojas (Hoja1 de los 2 libros) son idénticas.
¿Cómo puedo realizar mi reemplazo de Hoja1, asegurándome de que los enlaces de Resumen no se "rompan"?
Gracias de antemano
Grotone
Configuración: Windows 2003 Internet Explorer 6.0
5 respuestas
-
Hola a todos,
Si están leyendo las otras soluciones de los miembros y no entienden nada o les parece todo demasiado complejo, aquí está la solución más efectiva y simple para ustedes:
Tomemos el siguiente caso como ejemplo:
Ustedes quieren reemplazar la Hoja2 del LibroA por la Hoja2 del LibroB.
Sin embargo, no quieren perder las fórmulas de la Hoja1 que hacen referencia a la Hoja2 del LibroA. (este párrafo puede ser difícil de entender a primera vista, pero asegúrense de asimilar lo que está escrito antes de continuar)
Esto es lo que deben hacer:
1. Abran ambos libros
2. En el LibroB, hagan clic en Hoja2
3. En el menú Inicio, hagan clic en Formato > Mover o copiar una hoja...
4. ¡Aparece una ventana! En esta ventana, bajo el menú En el libro, seleccionen LibroA. Aún en esta ventana, marquen Crear una copia (en la parte inferior izquierda), luego hagan clic en OK
5. En este momento, deberían ser automáticamente redirigidos al LibroA. Notarán que ahora tienen Hoja2 y Hoja2 (2). Deben eliminar Hoja2
6. Renombren Hoja2 (2) a Hoja2
7. Luego, vayan a Hoja1: notan que las funciones que hacen referencia a Hoja2 ya no funcionan y están reemplazadas por #REF. Es normal. Ahora, seleccionen todas las celdas y hagan la función Reemplazar (CTRL+H)
8. Aparece una ventana. En esta ventana, en la primera sección, escriban #REF. En la segunda sección, escriban Hoja2. Finalmente, hagan clic en Reemplazar todo (en la parte inferior izquierda) y ¡listo!
Tengan en cuenta que esta solución funciona para Excel 2010, pero no estoy seguro de que se aplique a otras versiones de Excel. Además, antes de comenzar los pasos, asegúrense de que ninguna celda de la Hoja1 contenga ningún error, es decir, un #REF. De lo contrario, el paso 8 podría reemplazar #REF por Hoja2 en sus fórmulas.
¡Eso es! ¡Espero que mis explicaciones les hayan sido útiles!
¡Que tengan un buen día a todos!
--
Mathieu-
-
De hecho, lo había notado :P Sin embargo, estoy seguro de que lo que he escrito servirá a alguien, en algún lugar, algún día!
¡Que tengas un buen día!
Mathieu- Lo que escribiste me ha servido, dos años después ;)
Utilicé la opción "guardar una macro" haciendo las manipulaciones que mencionaste arriba. ¡Y funciona bien!
Solo tengo que modificar ligeramente la macro creada para duplicarla en otros archivos y voilà, ¡he actualizado todo mi documento!
Rápido y bien hecho.
Gracias por escribir esta publicación fuera de tema pero muy útil xD
-
-
No es posible (hasta donde yo sé) que tus enlaces no se rompan cuando borras tu primera hoja. Dos soluciones para ti:
- Vuelve a crear tus enlaces con tu macro (sobreescribes tus fórmulas)
- Haz un copiar y pegar entre tus dos hojas (quizás borrando completamente la hoja de destino antes de pegar)
No sé si esto te convendrá, pero no veo otras soluciones. -
Merci, finalmente logré salir adelante haciendo una mezcla de los dos.
Para aquellos a quienes les interese, en resumen, tengo un primer libro con una hoja "Feuil1" y una hoja "Résumé" que depende de valores de Feuil1, pero que también depende de otras hojas de este libro que no cambiarán. Tengo un segundo libro con las mismas 2 hojas que el primer libro (pero con datos que cambian).
Busco reemplazar "Feuil1" del primer libro por "Feuil1" del segundo, asegurándome de que los valores de los que depende "Résumé" del primer libro no tengan enlaces rotos (enlaces que apunten a la nueva "Feuil1", pero también a las otras hojas que no cambian).
Después de darme cabeza, esto es lo que hago,
Elimino "Résumé" del segundo libro y lo reemplazo por "Résumé" del primer libro, y corrijo los enlaces del segundo libro con ChangeLinks.
Luego, elimino "Feuil1" y "Résumé" del primer libro, y los reemplazo con los del segundo libro, y corrijo los enlaces del primer libro nuevamente con ChangeLinks.
Todo esto con Application.DisplayAlerts = False para que Excel no me moleste en medio de las operaciones.
Todo funciona y hace exactamente lo que quiero, pero es un método bastante desordenado, si alguien tiene una mejor idea, estoy abierto a sugerencias.
Sub Importar()
Dim libro As String
Dim hoja As String
Dim ruta As String
libro = Application.GetOpenFilename(FileFilter:="Archivos Excel (*.xls), *.xls", Title:="Elegir un archivo Excel")
Workbooks.Open libro
hoja = Workbooks(2).ActiveSheet.Name
'paso 1
Application.DisplayAlerts = False
Workbooks(2).Sheets("Résumé").Delete
Workbooks(1).Sheets("Résumé").Copy after:=Workbooks(2).Sheets("Navigation")
alinks = Workbooks(2).LinkSources(xlExcelLinks)
ruta = Workbooks(2).Path & "\" & hoja & ".xls"
Workbooks(2).ChangeLink alinks(1), ruta, xlExcelLinks
'paso 2
Application.DisplayAlerts = False
Workbooks(1).Sheets(hoja).Delete
Workbooks(1).Sheets("Résumé").Delete
Workbooks(2).Sheets(hoja).Copy after:=Workbooks(1).Sheets("Navigation")
Workbooks(2).Sheets("Résumé").Copy after:=Workbooks(1).Sheets("Navigation")
alinks = Workbooks(1).LinkSources(xlExcelLinks)
ruta = Workbooks(1).Path & "\" & Workbooks(1).Name
Workbooks(1).ChangeLink alinks(1), ruta, xlExcelLinks
Application.DisplayAlerts = True
End Sub
a+
Grotone -
Sí...
finalmente funciona para las vinculaciones de celdas, pero falla si utilizo la propiedad linkedcell de un OptionButton.
la LinkedCell se convierte en '#REF'!C200 por ejemplo, y ChangeLink no puede hacer nada al respecto... -
Hola,
y utilizando un tercer libro intermedio que tiene los nombres de las hojas vinculadas?
Eso daría algo así:
' preservación de los enlacesActiveWorkbook.ChangeLink Name:="D:\Users\Eric\Documents\ccm\Classeur2.xls", _ NewName:="D:\Users\Eric\Documents\ccm\Classeur3.xls", Type:=xlExcelLinks ' reemplazo de la hoja '.... ' restablecimiento de los enlaces ActiveWorkbook.ChangeLink Name:="D:\Users\Eric\Documents\ccm\Classeur3.xls", _ NewName:="D:\Users\Eric\Documents\ccm\Classeur2.xls", Type:=xlExcelLinks
eric
Nunca responderás a un mp no solicitado...
Bueno, eso está hecho.