¿Cómo se puede "dividir" un archivo de Excel (.xlsx) que contiene varias hojas en una hoja separada [n] .xlsx?

17

Creo que el título lo dice todo para esta pregunta, pero para explicar un poco más:

Tengo un archivo .xlsx que contiene unas pocas docenas de hojas. Quiero generar todas esas hojas como archivos .xlsx separados. No es necesario nombrarlos automáticamente. ¿Excel tiene una función para exportar hojas a un archivo separado?

eichoa3I
fuente

Respuestas:

17

No es una característica incorporada.

Sin embargo, si ejecuta este código, debería hacer el trabajo.

Sub SaveSheets()
    Dim strPath As String
    Dim ws As Worksheet

    Application.ScreenUpdating = False

    strPath = ActiveWorkbook.Path & "\"
    For Each ws In ThisWorkbook.Sheets
        ws.Copy
        'Use this line if you want to break any links:
        BreakLinks Workbooks(Workbooks.Count)
        Workbooks(Workbooks.Count).Close True, strPath & ws.Name & ".xlsx"
    Next

    Application.ScreenUpdating = True
End Sub

Sub BreakLinks(wb As Workbook)
    Dim lnk As Variant
    For Each lnk In wb.LinkSources(xlExcelLinks)
        wb.BreakLink lnk, xlLinkTypeExcelLinks
    Next
End Sub

Para ejecutar el código, haga lo siguiente:

  1. Abra el editor de VBA ( Alt+ F11)
  2. En el árbol en la esquina superior izquierda, haga clic derecho en su libro e inserte un nuevo módulo
  3. Copie el código anterior en este módulo
  4. Cierra el editor de VBA
  5. En Excel, presione Alt+ F8para ejecutar macros y seleccioneSaveSheets

o vea ¿Cómo agrego VBA en MS Office?

Peter Albert
fuente
¡Gracias! ¿Qué pasa con el reverso? Este archivo de Excel aparentemente contenía "enlaces" (no he usado esta función antes), y después de la división, Excel no puede encontrar los enlaces (está buscando la primera hoja); ¿hay algún lugar para dividirlos y actualizar los enlaces al mismo tiempo / o simplemente actualizar los enlaces?
eichoa3I
1
la pregunta es cómo quieres manejar los enlaces. Puede reemplazarlos fácilmente con valores insertando Workbooks(Workbooks.Count).BreakLinksdespués de ws.Copy...
Peter Albert
Después de abrir un libro de trabajo, una ventana emergente en Excel me pidió que arreglara los enlaces; Hice clic en este cuadro de diálogo y ahora los enlaces funcionan para todos los archivos. Sin embargo, me pregunto si esto se guardó en el archivo o localmente ...
eichoa3I
Cuando dice reemplazarlos con valores con Workbooks (Workbooks.Coun) .BreakLinks, ¿quiere decir que los enlaces se eliminan o ...? Creo que la mejor manera de manejarlos es simplemente eliminarlos (es decir, cuando los usuarios abren los archivos de Excel ahora separados, no ven la advertencia sobre los enlaces rotos).
eichoa3I
lo siento, intente Workbooks(Workbooks.Count).BreakLink- sin el sal final
Peter Albert
11
  1. Cuando hace clic con el botón derecho en la pestaña de una hoja de Excel, puede seleccionar Mover o Copiar ...

    ingrese la descripción de la imagen aquí

  2. En el cuadro de diálogo resultante, puede seleccionar un libro de trabajo de destino. Seleccione (nuevo libro) .

    ingrese la descripción de la imagen aquí

  3. Haz clic en Aceptar . Su hoja ahora está dentro de un nuevo documento.

Der Hochstapler
fuente
8

Probé solución de Peter Albert y no funcionó para mí, así que encontré una solución en este post ( “Excel - Guardar hojas de cálculo como archivos separados”) en el Diario de un geek de la computadora .

Funciona muy bien Debe cambiar el nombre de las hojas que contienen puntos para obtener correctamente los archivos con .xlsextensiones.

Sub CreateNewWBS()
Dim wbThis As Workbook
Dim wbNew As Workbook
Dim ws As Worksheet
Dim strFilename As String

    Set wbThis = ThisWorkbook
    For Each ws In wbThis.Worksheets
        strFilename = wbThis.Path & "/" & ws.Name
        ws.Copy
        Set wbNew = ActiveWorkbook
        wbNew.SaveAs strFilename
        wbNew.Close
    Next ws
End Sub

Use las instrucciones para crear y ejecutar esta macro desde la publicación de Peter Albert o desde ¿Cómo agrego VBA en MS Office?

hrvoj3e
fuente
1
También probé solución de Peter Albert y hubo un error "en tiempo de ejecución error'13' : tipo incorrecto Por suerte la solución en esta respuesta que funciona para mí..
Bin
¿Cómo puedo hacer que sobrescriba los archivos existentes con el mismo nombre?
DAE
No necesitaba esto porque cada volcado va a una carpeta separada. Tal vez intente este hilo
hrvoj3e
Su solución funcionó para mí :)
Muhammad Waheed