Cómo abrir y completar una plantilla con Excel VBA

Comparte ahora:

Las plantillas de Excel suelen ser libros de trabajo, con un marco de creación de informes, a menudo compatibles con funciones. Una plantilla (xltx) se puede utilizar una y otra vez sin contaminarla con datos. Después de la población con datos, se guarda un libro de trabajo de plantilla como xlsx, preservando el estado virgen del xltx en sí.

En este ejercicio usaremos código VBA para abrir y llenar una plantilla. La plantilla puede ser encontrado aquí y la macro de Excel utilizada se puede encontrar aquí.

Este artículo asume que el lector muestra la cinta de desarrollador y está familiarizado con el editor de VBA. De lo contrario, busque en Google "Pestaña de desarrollador de Excel" o "Ventana de código de Excel".

La plantilla

Primero, crearemos una plantilla ficticia, poblada con datos, una tabla dinámica y un gráfico, de la siguiente manera:

Abra un nuevo archivo de Excel. Cambiar el nombre de "Hoja1" como "Gráfico" y "Hoja2" como "Datos"

Copie el siguiente texto, incluidos los títulos, en el D1 de la pestaña "Datos":

Dirección TrabajoRef Género
Niños y familia CH SW2588 Mujer
Niños y familia CHRS2775 Mujer
Niños y familia CH SW2630 Mujer
Niños y familia CHRS2775 Hombre
Niños y familia CHCC2628 Mujer
Niños y familia CH HT2579 Mujer
Community Health CW T (2559 Mujer
Community Health CW QS2774 Mujer
Community Health CWO2745 Hombre
Medio Ambiente EE SM2814 Mujer
Medio Ambiente EE IT2772 Hombre
Medio Ambiente EESO2784 Hombre
Recursos RS CO2557 Mujer
Recursos RS HO2539 Hombre

Seleccione todos los datos, incluidos los encabezados de las columnas, e inserte una tabla dinámica en A1 de la hoja "Datos", como se muestra a continuación.Inserte una tabla dinámica en A1 de la hoja "Datos"

Cree un gráfico en la pestaña "Gráfico", utilizando la tabla dinámica como fuente de datos.Crear un gráfico en la pestaña "Gráfico"

Elimina los datos en D2: F15. No es necesario restablecer el rango de datos de la tabla dinámica; déjelo poblado incluso si no hay datos.  Eliminar los datos en D2: F15

Guarde el libro de trabajo como “VacancyTemplate.xltx. " en un subdirectorio de aquel en el que residirá el libro de macros. Responda "No" a las alertas de Excel durante el guardado.

También necesitaremos un subdirectorio de informes. Por ejemplo:

Informes de Excel (xlsm almacenado aquí)

| _Plantillas (xlxt almacenado aquí)

       | _Informes (cada xlsx guardado aquí)

Una vez guardado como xltx, cierra la plantilla

La macro

Abra un nuevo libro de trabajo para contener nuestro código. Cambie el nombre de “Hoja1” como “Principal” y “Hoja2” como “Base de datos”.

Coloque un botón en "Principal" para impulsar la aplicación.

Normalmente, los datos se recuperan de bases de datos. Como no todo el mundo tiene una base de datos a mano, la hoja "Base de datos" emulará una tabla de base de datos.

Copie los datos encontrados en el start de este artículo en la pestaña "Base de datos" en A1 ...Copie los datos encontrados en la Start De este artículo en la pestaña Base de datos en A1

El código

La siguiente estructura de código define claramente los procesos:

  • Obtenga los datos de la "base de datos";
  • Abra la plantilla;
  • Complete la plantilla con los datos y restablezca el rango de datos de la tabla dinámica;
  • Guarde la plantilla como informe
Option Explicit
    'Create objects to represent the template workbook and worksheets
    Public wb As Object
    Public XL As Object
    Public connDB As New ADODB.Connection
    Public rs As ADODB.Recordset
    Public eRow As Integer
    Public eRec As Integer
    Public dDate As String

Sub openWorksheet()
    Call GetData
    Call OpenTemplate
    Call PopulateTemplate
    
    'Save template as datestamped xlsx
    On Error Resume Next
    dDate = Format(Now(), "yyyy.mm.dd")
    wb.SaveAs Filename:=ActiveWorkbook.Path & "\Reports\Vacancies" & dDate & ".xlsx", _
         FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

     Sheets("Main").Activate        'Move off the database tab
     wb.Activate            'Bring the chart to the fore
     Set wb = Nothing
     Set XL = Nothing
     Set rs = Nothing
     Set connDB = Nothing
End Sub

Sub GetData()
    'Emulate database retrieval
    If connDB.State = 1 Then connDB.Close
    Sheets("Database").Activate
    Sheets("Database").Range("A1").Select
    Selection.End(xlDown).Select
    
    eRec = ActiveCell.Row - 1 'establish how many records will be in the recordset
                     'This step won't be needed in a database environment
    eRow = ActiveCell.Row   'the end row, used later in the template
    
    connDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
      "Data Source=" & ActiveWorkbook.FullName & ";" & _
      "Extended Properties=Excel 12.0;"
        
    Set rs = New ADODB.Recordset
    rs.Open "Select top " & eRec & " * from [Database$]", connDB, , , adCmdText
End Sub

 Sub OpenTemplate()
    Set XL = CreateObject("Excel.Application")
    XL.Visible = True       'enables us to see what's happening on debug.
    XL.Workbooks.Add ActiveWorkbook.Path & "\Templates\VacancyTemplate.xltx"
    Set wb = XL.ActiveWorkbook             'the new workbook is referenced by "wb"
 End Sub
 
 Sub PopulateTemplate()
    wb.Sheets("Data").Activate
    wb.Sheets("Data").Range("D2").CopyFromRecordset rs
    wb.Sheets("Data").Range("A1").Select
    
    'resize the range driving the pivot table, using the eRow variable.
    wb.Sheets("Data").PivotTables("PivotTable1").ChangePivotCache wb. _
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Data!R1C4:R" & eRow & "C6", _
        Version:=xlPivotTableVersion14)
    wb.Sheets("Chart").Select

 End Sub

Objetos de datos ActiveX

Para simular la lectura de una base de datos, debemos hacer referencia a la biblioteca Active Xrary. Haga esto a través de Herramientas> Referencias desde la ventana de código.Referencia The Active X Library

Prueba el código

Asigne el botón en "Principal" a Sub libro abierto. Guarde el libro de trabajo como "Poblando Templates.xlsm".

CERRAR el libro de trabajo y volver a abrirlo.

Presione el botón para ver el resultado. Aumente el número de filas de datos en “Base de datos” y vuelva a ejecutar, viendo si el Gráfico se ha actualizado con la información adicional.

En el código anterior, hemos mostrado la plantilla al principio, con XL.Visible = Verdadero. En el entorno en vivo, esto se puede hacer al final, para que las actualizaciones de la pantalla no sean visibles.

¡Haga frente al desastre de datos!

Pocas cosas son más frustrantes que un archivo de Excel muy desarrollado que falla, corrompe el archivo de origen y no tiene una copia de respaldo disponible. En tales casos, donde Excel no puede recuperar el archivo dañado, todo el trabajo realizado al respecto es lost a menos que tenga una herramienta a mano para arreglar Excel archivos.

También es prudente respaldar con frecuencia el trabajo valioso.

Introducción del autor:

Felix Hooker es un experto en recuperación de datos en DataNumen, Inc., que es el líder mundial en tecnologías de recuperación de datos, incluyendo rar reparación y productos de software de recuperación de sql. Para más información visite www.datanumen.com

Comparte ahora:

Los comentarios están cerrados.