Capturar datos en Excel, guardar en otra hoja y decidir a partir de qué fila comenzar a guardar
En un tutorial anterior vimos cómo desarrollar un formulario en Excel paso a paso donde capturábamos información y dependiendo de lo elegido en un Combobox los datos se guardaban en cada una de las 3 hojas del archivo.
El archivo es funcional, sin embargo recibí algunos comentarios acerca de la fila inicial donde se guardan los datos. En mi ejemplo, los datos se guardan a partir de la fila 2, lo cual es lo normal, pero al parecer no siempre es así para todos los usuarios.
Ver Video Capturar datos en Excel y decidir a partir de qué fila comenzar a guardar
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
En qué fila guardar los datos
Como lo comenté hace un momento, en el ejemplo los datos se guardan a partir de la fila 2, como se muestra en la Figura 1.
Figura 1. Los datos se guardan a partir de la fila 2.
Usamos la propiedad CurrentRegion para detectar la región actual de la hoja Base1. Si todavía no hay datos en Base1, CurrentRegion devolverá sólo el rango de la fila 1, por lo tanto habrá solo una fila, y si le sumamos 1 a ese valor entonces será 2, lo que significa que en la fila 2 se guardarán los datos.
A continuación la macro que guarda los datos en la hoja Base1, usando el botón Guardar B1.
'Botón Guardar B1 Private Sub CommandButton1_Click() Dim NombreHoja As String Dim HojaDestino As Range Dim NuevaFila As Integer NombreHoja = "Base1" 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
Guardar datos a partir de la fila 8
En el tutorial de Youtube recibí algunos comentarios donde me decían que los encabezados de su ejemplo comenzaban en otra fila diferente a la 1, diremos que los encabezados están en la fila 7. Entonces los valores deberán guardarse a partir de la fila 8.
Figura 2. Los valores se guardarán a partir de la fila 8.
Para lograr lo anterior, la propiedad CurrentRegion será de la celda A7, y si no hay datos la fila será la 7, es decir sólo 1 fila. Para lograr que los valores se guarden en la fila 8, entonces le sumaremos 7 a la variable NuevaFila que es la que devuelve la cantidad de filas de CurrentRegion.
'Botón Guardar B2 Private Sub CommandButton3_Click() Dim NombreHoja As String Dim HojaDestino As Range Dim NuevaFila As Integer NombreHoja = "Base2" Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A7").CurrentRegion NuevaFila = HojaDestino.Rows.Count + 7 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
Guardar datos en fila 2 aunque tengamos valores en otras columnas
La otra pregunta que me han hecho es, cómo le hacemos si deseo que los valores se guarden a partir de fila 2, pero en ciertas columnas tenemos valores ingresados previamente.
Figura 3. Se guardarán los valores a partir de la fila, aunque haya valores en la columna G.
Para lograr esto la propiedad CurrentRegion no nos servirá, ya que si por ejemplo tenemos valores en la columna G hasta la fila 15, entonces las filas que resultarán en CurrentRegion serán 15 y si le sumamos 1, entonces los valores se ingresarán a partir de la fila 16, pero no, nosotros deseamos que se guarden en la fila 2 y hacia abajo.
En lugar la propiedad CurrentRegion usaremos la función CONTARA (CountA) para devolver la cantidad de celdas con valores de la columna A, y al total de celdas de esa columna le sumaremos 1, así obtenemos la fila 2.
'Botón Guardar B3 Private Sub CommandButton4_Click() Dim NombreHoja As String Dim HojaDestino As Integer Dim NuevaFila As Integer NombreHoja = "Base3" 'Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A1").CurrentRegion HojaDestino = Application.WorksheetFunction.CountA(Sheets(NombreHoja).Range("A:A")) NuevaFila = HojaDestino + 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_2 – EXCELeINFO.zip