Formulario de captura en Excel que guarda datos en otra hoja
Cuando deseamos que otras personas recaben datos siempre son de gran utilidad los formularios. Un formulario de captura nos permite recolectar sólo datos necesarios, ya que al tener campos estructurados y listas con opciones, evitamos que los usuarios escriban cosas que no necesitamos.
Además, si al formulario le añadimos macros, podremos tener nuestros datos en tablas para posteriormente manipularlos con facilidad.
Por qué no usar los formularios de vba
A esta pregunta siempre daré la misma respuesta: todo depende del gusto del diseñador.
En otro artículo les comparto un formulario diseñado en el IDE de vba que usa el mismo código para dar de alta los datos en una hoja de Excel.
El ejemplo que les comparto incluye un formulario diseñado en celdas de una hoja de Excel, con bordes y colores que lo hacen ver un tanto minimalista.
Listas de validación de datos
Para que los usuarios de nuestro formulario sólo capturen la información necesario, el algunos campos usaremos la Validación de datos para que tengan listas con opciones. Las diferentes maneras de usar la Validación de datos las podremos ver en este artículo publicado en este mismo Blog.
Dónde quedan los datos capturados
Cuando el usuario termine de capturar los datos en el formulario, debe presionar el botón Guardar datos y éste ejecutará una macro que los enviará a otra de Excel en formato de tabla.
Código vba
A continuación el código usado para el ejemplo.
Option Explicit Sub Captura_Datos() 'Declaración de variables ' Dim strTitulo As String Dim Continuar As String Dim TransRowRng As Range Dim NewRow As Integer Dim Limpiar As String ' strTitulo = "Atención Telefónica" ' Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo) If Continuar = vbNo Then Exit Sub ' Set TransRowRng = ThisWorkbook.Worksheets("Datos").Cells(1, 1).CurrentRegion NewRow = TransRowRng.Rows.Count + 1 With ThisWorkbook.Worksheets("Datos") .Cells(NewRow, 1).Value = Date .Cells(NewRow, 2).Value = Format(Date, "dd") .Cells(NewRow, 3).Value = Format(Date, "mm") .Cells(NewRow, 4).Value = Format(Date, "yy") .Cells(NewRow, 5).Value = ThisWorkbook.Sheets(1).Range("C6") .Cells(NewRow, 6).Value = ThisWorkbook.Sheets(1).Range("C9") .Cells(NewRow, 7).Value = ThisWorkbook.Sheets(1).Range("C12") .Cells(NewRow, 8).Value = ThisWorkbook.Sheets(1).Range("C15") .Cells(NewRow, 9).Value = ThisWorkbook.Sheets(1).Range("F9") .Cells(NewRow, 10).Value = ThisWorkbook.Sheets(1).Range("F12") .Cells(NewRow, 11).Value = ThisWorkbook.Sheets(1).Range("F15") End With ' MsgBox "Alta exitosa.", vbInformation, strTitulo Limpiar = MsgBox("Deseas limpiar los campos de la captura?", vbYesNo, strTitulo) If Limpiar = vbYes Then With ActiveWorkbook.Sheets(1) .Range("C6").ClearContents .Range("C9").ClearContents .Range("C12").ClearContents .Range("C15").ClearContents .Range("F9").ClearContents .Range("F12").ClearContents 'ClearContents no funciona en celda combinada... .Range("F15").Value = "" End With Else End If ' End Sub
Referencias
Ejemplo de formulario de captura en Excel
Anexos
:: Descarga el ejemplo Formulario de captura en hoja de Excel.rar