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.
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.
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.
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
Formulario de captura en Excel que guarda datos en varias hojas usando VBA y macros.zip