Formulario de captura en Excel que guarda datos en varias hojas usando VBA y macros

Este tutorial forma parte de una serie de tutoriales que he desarrollado en los que vemos cómo capturar datos y guardar los datos en forma de base de datos. Los tutoriales que he desarrollado del tema son:

Capturar datos y guardarlos en varias hojas

Ya vimos anteriormente que podemos adecuar nuestro formulario de captura para guardar los datos en diferentes destinos. Ahora, en este tutorial lo que pretendo es que tengas un formulario donde captures datos y esos datos puedan ser guardados en diferentes hojas del libro, pero siendo más específicos, que puedas elegir en qué hoja deseas que se guarden. Y lo anterior lo haremos escribiendo macros en leguaje VBA.

Ver Video Capturar datos y guardarlos en diferentes hojas en Excel

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

En este video tutorial te muestro cómo desarrollar este ejemplo paso a paso, con el fin de que comprendas la lógica de las macros usadas y puedas hacer tú mismo tus adecuaciones.

Preparando las hojas

En la primera hoja de nuestro archivo es donde sólo habrá un botón que llamará al formulario. En tu archivo puedes ponerle instrucciones de uso o alguna imagen de tu negocio.

Crearemos 3 hojas que llevarán por nombre Vendedor 1, Vendedor 2 y Vendedor 3. Dichas hojas tendrán las siguientes columnas: Fecha, Vendedor, Valor 1, Valor 2, Valor 3 y Valor 4. Es importante que las hojas tengan las mismas columnas, a menos que modifiques el código del formulario para guardar información diferente en cada hoja.

Las 3 hojas del archivo de Excel tendrán la misma estructura de columnas.

Figura 1. Las 3 hojas del archivo de Excel tendrán la misma estructura de columnas.

Diseñando el formulario en el IDE de VBA

Para este ejemplo el formulario será más bien sencillo, donde lo importante será entender la lógica de cómo es que guardamos datos en diferentes hojas del archivo.

Presionamos la combinación de teclas [Control] + [F11] para abrir el IDE de VBA. Una vez abierto, en el menú Insertar elegimos Userform. Se añadirá un formulario nuevo donde insertaremos los siguientes controles.

  • 1 ComboBox que servirá para enlistar los nombres de las hojas del archivo.
  • 4 Etiquetas de los valores 1 al 4.
  • 4 TextBoxes donde se capturarán los valores del 1 al 4.
  • Un botón Aceptar.
  • Un botón Cancelar.

Formulario de Excel VBA en modo diseño.

Figura 2. Formulario de Excel VBA en modo diseño.

Al mostrar el formulario lo primero que veremos es que el ComboBox se llenará con el nombre de las hojas de cada vendedor, permitiéndonos así elegir en qué hoja deseamos guardar la información en forma de base de datos.

Lista de nombre de hojas del archivo de Excel.

Figura 3. Lista de nombre de hojas del archivo de Excel.

Código VBA de las macros

Primero haremos uso del evento Initialize que nos servirá para rellenar el ComboBox con el nombre de las hojas a partir de la Vendedor 2. Para eso usamos el bucle For, comenzando en el número 2.

Option Explicit
'
'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo
'http://www.exceleinfo.com/uso-de-colores-en-excel-con-macros/
'
'Al iniciar el formulario
Private Sub UserForm_Initialize()
    
    Dim intHojas As Integer
    Dim i As Integer
    
    intHojas = ThisWorkbook.Sheets.Count
    
    For i = 2 To intHojas
        
        Me.ComboBox1.AddItem ThisWorkbook.Sheets(i).Name
        
    Next i
    
End Sub

El botón Cancelar sólo tendrá la intrucción Unload que nos permitirá cerrar el formulario.

'Botón Cerrar
Private Sub CommandButton2_Click()
    
    Unload Me

End Sub

El botón Guardar tendrá una macro donde usaremos la variable HojaDestino para saber en qué hoja deseamos guardar los datos y ese valor se obtendrá desde el ComboBox.

Una vez elegida la hoja destino, comenzaremos a guardar los valores en dicha hoja.

'Botón Guardar
Private Sub CommandButton1_Click()
    
    Dim NombreHoja As String
    Dim HojaDestino As Range
    Dim NuevaFila As Integer
    
    NombreHoja = Me.ComboBox1.Value
    
    Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A1").CurrentRegion
    NuevaFila = HojaDestino.Rows.Count + 1
    
    With ThisWorkbook.Sheets(NombreHoja)
        .Cells(NuevaFila, 1).Value = Date
        .Cells(NuevaFila, 2).Value = Me.ComboBox1.Value
        .Cells(NuevaFila, 3).Value = Me.TextBox1.Value
        .Cells(NuevaFila, 4).Value = Me.TextBox2.Value
        .Cells(NuevaFila, 5).Value = Me.TextBox3.Value
        .Cells(NuevaFila, 6).Value = Me.TextBox4.Value
    End With
    
    MsgBox "Alta exitosa.", vbInformation, "EXCELeINFO"
    Unload Me
    
End Sub

Descarga el archivo de ejemplo

Descargar el ejemplo Formulario de captura en Excel que guarda datos en varias hojas usando VBA y macros.zip

You may also like...