Problema con la la macro para llenar formulario

Tengo este problema cuando ingreso el Segundo dato me lo copia encima del primero me explico no me guarda el primer dato

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

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 + 2
With ThisWorkbook.Sheets(NombreHoja)
.Cells(NuevaFila, 1).Value = Me.TextBox1.Value
.Cells(NuevaFila, 2).Value = Me.TextBox2.Value
.Cells(NuevaFila, 3).Value = Me.TextBox3.Value
.Cells(NuevaFila, 4).Value = Me.TextBox4.Value
.Cells(NuevaFila, 5).Value = Me.TextBox5.Value
.Cells(NuevaFila, 6).Value = Me.TextBox6.Value
.Cells(NuevaFila, 7).Value = Me.TextBox7.Value
.Cells(NuevaFila, 8).Value = Me.ComboBox2.Value
.Cells(NuevaFila, 9).Value = Me.ComboBox3.Value
.Cells(NuevaFila, 10).Value = Me.ComboBox4.Value
End With
MsgBox "Alta exitosa.", vbInformation, "Federico Palacio"
Unload Me
End Sub

1

1 respuesta

Respuesta
1

Te anexo la macro actualizada.

La hoja debe ser declarada como Object.

Debes validar que el textbox1 siempre tenga datos, de lo contrario no podrás encontrar la siguiente fila vacía y es probable que por eso se encimen tus registros.

Private Sub CommandButton1_Click()
    Dim NombreHoja As String
    Dim HojaDestino As Object
    Dim NuevaFila As Integer
    '
    'validar textbox1
    If TextBox1.Value = "" Then
        MsgBox "Es obligatorio capturar un dato"
        TextBox1.SetFocus
        Exit Sub
    End If
    '
    NombreHoja = Me.ComboBox1.Value
    Set HojaDestino = ThisWorkbook.Sheets(NombreHoja)
    NuevaFila = HojaDestino.Range("A" & Rows.Count).End(xlUp).Row + 1
    With HojaDestino
        .Cells(NuevaFila, 1).Value = Me.TextBox1.Value
        .Cells(NuevaFila, 2).Value = Me.TextBox2.Value
        .Cells(NuevaFila, 3).Value = Me.TextBox3.Value
        .Cells(NuevaFila, 4).Value = Me.TextBox4.Value
        .Cells(NuevaFila, 5).Value = Me.TextBox5.Value
        .Cells(NuevaFila, 6).Value = Me.TextBox6.Value
        .Cells(NuevaFila, 7).Value = Me.TextBox7.Value
        .Cells(NuevaFila, 8).Value = Me.ComboBox2.Value
        .Cells(NuevaFila, 9).Value = Me.ComboBox3.Value
        .Cells(NuevaFila, 10).Value = Me.ComboBox4.Value
    End With
    MsgBox "Alta exitosa.", vbInformation, "Federico Palacio"
    Unload Me
End Sub


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

El detalle de utilizar CurrentRegion, es que va desde la celda A1 y hasta la siguiente fila vacía que tengas, si vas a dejar 1 fila vacía entre registro y registro, entonces no es conveniente utilizar CurrentRegion.

Si quieres una fila adicional entre registro y registro, entonces aumenta a 2 en esta línea:

    NuevaFila = HojaDestino.Range("A" & Rows.Count).End(xlUp).Row + 2

Copia todo el código para que funciones correctamente.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas