Macro guardarinformacion de formulario a hoja de excel

Soy novato en esto de macros y vba, estoy haciendo una macro y formularios para guardar información en una base de datos, algo así como un maestro de códigos.

El asunto es que ya tengo casi todo avanzado, lo único que no consigo es que la información insertada en el formulario "CONFIRMAR_ALTA" logre guardarse en una hoja de excel llamada "DATOS", en filas consecutivas, es decir,

A2 (BIN)

B2 (PAÍS)

C3 (EMISOR)

D3 (CORREO 1)

E3 (CORREO 2 )

El error, es que siempre se guarda en la misma fila, es decir la reemplaza. Cuando lo que quiero es que si ingreso nueva data, pase a la fila siguiente.

Aquí el código del formulario "CONFIRMAR_ALTA":

Private Sub CommandButton1_Click()
Dim i As Double
Dim final As Double
Application.ScreenUpdating = False
Worksheets("DATOS").Visible = True
Worksheets("DATOS").Select

final = Range("J" & Rows.Count).End(xlUp).Row + 1
For i = 2 To final
If Worksheets("DATOS").Cells(i, 2) = "" Then
final = i
Exit For
End If
Next

'GRABAMOS ALTA NUEVO CLIENTE

Worksheets("DATOS").Cells(final, 1) = ALTA_CLIENTE.TextBox1
Worksheets("DATOS").Cells(final, 3) = ALTA_CLIENTE.TextBox2
Worksheets("DATOS").Cells(final, 4) = ALTA_CLIENTE.TextBox3
Worksheets("DATOS").Cells(final, 5) = ALTA_CLIENTE.TextBox5
Worksheets("DATOS").Cells(final, 2) = ALTA_CLIENTE.ComboBox5

'LIMPIAMOS EL FORMULARIO

ALTA_CLIENTE.TextBox1 = Empty
ALTA_CLIENTE.TextBox2 = Empty
ALTA_CLIENTE.TextBox3 = Empty
ALTA_CLIENTE.TextBox5 = Empty
ALTA_CLIENTE.ComboBox5 = Empty

Worksheets("DATOS").Visible = False
Application.ScreenUpdating = True

Application.DisplayAlerts = False
ActiveWorkbook.Save

CONFIRMAR_ALTA.Hide

End Sub

Private Sub CommandButton2_Click()
CONFIRMAR_ALTA.Hide

End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    If CloseMode = 0 Then Cancel = True

End Sub

Respuesta
1

Estás buscando el fin de rango en la col J (10) cuando en realidad solo pasas datos en las 5 primeras col.

Si no necesitas comparar el contenido de esa col realizá el cambio en esta línea, reemplazando J por A o por la que tenga datos con seguridad.

final = Range("A" & Rows.Count).End(xlUp).Row + 1

Luego no necesitas el bucle, es decir que podés eliminar las siguientes líneas:

For i = 2 To final
If Worksheets("DATOS").Cells(i, 2) = "" Then
final = i
Exit For
End If
Next

Nota: atención con la expresión HIDE que no es lo mismo que UNLOAD... la primera solo oculta el formulario y la 2da lo cierra.

1 respuesta más de otro experto

Respuesta
1

Yo en particular la tengo así mi USERFORM inserta uma línea nueva y luego compia los datos empezando en la fila 10

`Prueba con esta a ver y nos deja saber

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False
Worksheets("DATOS").Visible = True
Worksheets("DATOS").Select

ActiveSheet.Cells(10, 2).Select
Selection.EntireRow.Insert
Worksheets("DATOS").Cells(10, 1) = ALTA_CLIENTE.TextBox1
Worksheets("DATOS").Cells(10, 3) = ALTA_CLIENTE.TextBox2
Worksheets("DATOS").Cells(10, 4) = ALTA_CLIENTE.TextBox3
Worksheets("DATOS").Cells(10, 5) = ALTA_CLIENTE.TextBox5
Worksheets("DATOS").Cells(10, 2) = ALTA_CLIENTE.ComboBox5

'LIMPIAMOS EL FORMULARIO

ALTA_CLIENTE.TextBox1 = Empty
ALTA_CLIENTE.TextBox2 = Empty
ALTA_CLIENTE.TextBox3 = Empty
ALTA_CLIENTE.TextBox5 = Empty
ALTA_CLIENTE.ComboBox5 = Empty

Worksheets("DATOS").Visible = False
Application.ScreenUpdating = True

Application.DisplayAlerts = False
ActiveWorkbook.Save

CONFIRMAR_ALTA.Hide

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas