Macro de Excel VBA: Guardar pestañas en ficheros

Hoy os vamos a enseñar a diseñar una Macro de Excel VBA, con la que podremos guardar cada pestaña del libro en que estemos trabajando, como un libro independiente en una ruta de nuestra elección o programable con Año, Mes, Día, Nombre de pestaña…

Así que vamos a empezar:

Creación del fichero

Lo primero es crear nuestro fichero Excel, para ello seguiremos los siguientes pasos:

    1. Como vamos a insertar macros en él fichero, tenemos que guardarlo como Libro de Excel habilitado para macros (*.xlsm).
Macro de Excel VBA-Guardar-Pestañas-Paso1
Excel: Macro VBA para guardar pestañas en ficheros independientes. Paso 1
  1. Ahora crearemos una serie de pestañas con distintos nombres en el fichero, para así poder hacer pruebas con cada una de las pestañas.
    • Pestaña Macros. En esta pestaña encontraremos los controles de formulario que nos permitirán personalizar la ruta dónde guardaremos el ficheroTras insertar unos cuantos controles de formulario, fórmulas y formato, la hoja debería quedar como sigue:
      Macro de Excel VBA-Guardar-Pestañas-Macros
      Excel: Macro VBA para guardar pestañas en ficheros independientes. Macros
    • Pestaña Tareas. Insertamos una serie de datos aleatorios.
      Macro de Excel VBA-Guardar-Pestañas-Tareas
      Excel: Macro VBA para guardar pestañas en ficheros independientes. Tareas
    • Pestaña Colores. En esta pestaña hemos diseñado una fórmula que nos indique el color RGB que posee la celda de la primera columna de cada fila.
      Macro de Excel VBA-Guardar-Pestañas-Colores
      Excel: Macro VBA para guardar pestañas en ficheros independientes. Colores
    • Pestaña ASCII. A través de la fórmula =CARACTER(número) obtenemos todos los símbolos ASCII que posee el sistema.
      Macro de Excel VBA-Guardar-Pestañas-ASCII
      Excel: Macro VBA para guardar pestañas en ficheros independientes. ASCII

Programación de las Macros

Ahora pasamos a explicar las macros utilizadas:

  1. Macro Pestaña Macros. En esta pestaña hemos creado una macro que se ejecute automáticamente cada vez que la pestaña es seleccionada. El código que se ejecuta lee los nombres de cada pestaña que posee el libro y los usa como condición de validación de la celda H27, así tenemos una lista desplegable con dichos nombres. El código utilizado es:
    Private Sub Worksheet_Activate()
    Dim hoja As Worksheet
    Dim cad As String
    Dim hojas() As String
    Dim i As Integer
    For i = 0 To ActiveWorkbook.Sheets.Count - 1
    ReDim Preserve hojas(i) As String
    hojas(i) = Sheets(i + 1).Name
    Next i
    Range("H27").Validation.Delete
    Range("H27").Validation.Add Type:=xlValidateList, _
    AlertStyle:=xlValidAlertStop, Operator:= xlBetween, _
    Formula1:=Join(hojas, ",")
    End Sub
  2. Macro colorFondo. A través de una función personalizada, obtenemos el color del interior de la celda (fondo). La fórmula está programada para que devuelva el color en formato RGB (R,G,B) o por colores individuales (R, G o B)
    Function colorFondo(Celda As Range, Optional Color As String)
    Dim Col, Red, Green, Blue As Integer
    Col = Celda.Interior.Color
    Red = Col Mod 256
    Green = Col \ 256 Mod 256
    Blue = Col \ 65536 Mod 256
    Select Case Color
    Case "R"
    colorFondo = Red
    Case "G"
    colorFondo = Green
    Case "B"
    colorFondo = Blue
    Case Else
    colorFondo = "(" & Red & "," & Green & "," & Blue & ")"
    End Select
    End Function
  3. Macro saveSheet(). Y aquí la macro objetivo, a través de esta macro conseguiremos guardar nuestras pestañas en la ruta personalizada que elijamos. La macro divide la ruta en subdirectorios y va comprobando uno a uno si existe, en caso contrario lo crea y pasa al siguiente nivel, para finalmente guardar la pestaña en un archivo independiente.
    Sub saveSheet()
    Dim sh, Path, vPath, cad As String
    sh = Sheets(1).Range("H27").Value
    If sh = "" Then
    MsgBox "Debe elegir una pestaña en el rango " & _
    Chr(34) & "H27" & Chr(34), vbCritical, "Error"
    Exit Sub
    End If
    Path = Range("C31")
    vPath = Split(Path, "\")
    For Each element In vPath
    cad = cad & element & "\"
    If Dir(cad, vbDirectory) = "" Then
    MkDir cad
    End If
    Next element
    Sheets(sh).Copy
    ActiveWorkbook.SaveAs Filename:=Path & sh & ".xlsx", _
    FileFormat:=xlWorkbookDefault
    End Sub
Puedes descargarte nuestro archivo con el ejemplo de Macro de Excel VBA en el siguiente enlace:

Si te interesan nuestros tutoriales y te gustaría profundizar en Excel, ofrecemos cursos a compañías que pueden bonificarse a través de Fundae (Fundación Tripartita). Consigue más información y contacto en www.sin3w.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *