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.

Los datos se guardan a partir de la fila 2.

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.

Los valores se guardarán 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.

Se guardarán los valores a partir de la fila, aunque haya valores en la columna G.

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

Descargar el ejemplo Formulario de captura en Excel que guarda datos en varias hojas_2 – EXCELeINFO.zip

You may also like...