Filas vacías en Excel Macros VBa

Qué onda mis estimados, tengo una cuestión.

Tengo un inventario que me permite ingresar registros, funciona bien.
El problema es que, cuando hago un segundo registro me salta filas.

Más claro:
> El primero registro se coloca en las primeras filas.
> Cuando hago un segundo registro éste se posiciona debajo del primer registro en otra hoja dejando filas vacías.

¿Cómo puedo solucionar ésto? Adjunto mi código.

Private Sub CommandButton1_Click()
Dim i As Integer
Dim j As Integer
For i = 2 To 3000
If Hoja2.Cells(i, 2) = "" Then
Final = i
Exit For
End If
Next
Hoja2.Cells(Final, 1) = UserForm2.TextBox1
Hoja2.Cells(Final, 2) = UserForm2.TextBox2
Hoja2.Cells(Final, 3) = UserForm2.TextBox3
Hoja2.Cells(Final, 7) = UserForm2.TextBox4
Hoja2.Cells(Final, 8) = UserForm2.TextBox5
Hoja2.Cells(Final, 9) = UserForm2.TextBox6
Hoja2.Cells(Final, 10) = UserForm2.TextBox7
Hoja2.Cells(Final, 11) = UserForm2.TextBox8
Hoja2.Cells(Final, 12) = UserForm2.TextBox9
Hoja2.Cells(Final, 13) = UserForm2.TextBox10
Hoja2.Cells(Final, 14) = UserForm2.TextBox11
Hoja2.Cells(Final, 15) = UserForm2.TextBox12
Hoja2.Cells(Final, 16) = UserForm2.TextBox13
Hoja2.Cells(Final, 17) = UserForm2.TextBox14
Hoja2.Cells(Final, 18) = UserForm2.TextBox15
Hoja2.Cells(Final, 19) = UserForm2.TextBox16
Hoja3.Cells(Final, 1) = UserForm2.TextBox6
Hoja3.Cells(Final, 2) = UserForm2.TextBox7
Hoja3.Cells(Final, 3) = UserForm2.TextBox8
Hoja3.Cells(Final, 4) = UserForm2.TextBox9
Hoja3.Cells(Final, 5) = UserForm2.TextBox10
Hoja3.Cells(Final, 6) = UserForm2.TextBox11
Hoja3.Cells(Final, 7) = UserForm2.TextBox12
Hoja3.Cells(Final, 8) = UserForm2.TextBox13
Hoja3.Cells(Final, 9) = UserForm2.TextBox14
Hoja3.Cells(Final, 10) = UserForm2.TextBox15
Hoja3.Cells(Final, 11) = UserForm2.TextBox16
UserForm2.TextBox1 = ""
UserForm2.TextBox2 = ""
UserForm2.TextBox3 = ""
UserForm2.TextBox4 = ""
UserForm2.TextBox5 = ""
UserForm2.TextBox6 = ""
UserForm2.TextBox7 = ""
UserForm2.TextBox8 = ""
UserForm2.TextBox9 = ""
UserForm2.TextBox10 = ""
UserForm2.TextBox11 = ""
UserForm2.TextBox12 = ""
UserForm2.TextBox13 = ""
UserForm2.TextBox14 = ""
UserForm2.TextBox15 = ""
UserForm2.TextBox16 = ""
UserForm4.Hide
End Sub

1 Respuesta

Respuesta
1

Los datos los mandas a dos hojas distintas pero tu bucle para ubicar la ultima celda vacía (número de fila de dicha celda en realidad) solo lo aplicas a una de ellas con lo que, al aparentemente, no ser necesariamente el mismo número de fila la última en ambas, genera tu problema.

Abraham Valencia

PD: Sugiero, además, mejorar el código: Usar otro tipo de variables, usar no un bucle para hallar la última celda vacia sino mejor la propiedad Range. End, usar algún Array y/o bucle para enviar los datos de los controles a las celdas

¿Entonces cuál sería la solución viable para éste caso?
Te lo agradecería, brother.

Siendo domingo me he dado tiempo para hacer esto:

Private Sub CommandButton1_Click()
Dim Objeto  As control
Dim Ultimafila1 As Long, Ultimafila2 As Long, Celdas As Integer, Valortextbox As Integer
Let Ultimafila1 = Hoja2.Cells(Rows.Count, 1).End(xlUp).Row + 1
Let Ultimafila2 = Hoja3.Cells(Rows.Count, 1).End(xlUp).Row + 1
For Celdas = 1 To 3
Hoja2.Cells(Ultimafila1, Celdas) = UserForm2.Controls("TextBox" & Celdas)
Next
Let Valortextbox = 4
For Celdas = 7 To 19
Hoja2.Cells(Ultimafila1, Celdas) = UserForm2.Controls("TextBox" & Valortextbox)
Let Valortextbox = Valortextbox + 1
Next
Let Valortextbox = 6
For Celdas = 1 To 11
Hoja3.Cells(Ultimafila2, Celdas) = UserForm2.Controls("TextBox" & Valortextbox)
Let Valortextbox = Valortextbox + 1
Next
For Each Objeto In Me.Controls
If TypeOf Objeto Is MSForms.TextBox Then
Objeto.Text = ""
End If
Next Objeto
End Sub

He colocado tu código tal y como lo compartes pero no me ha funcionado
No sé si tengo que agregarle algo más

El código yo lo he hecho de memoria ya que ni tengo tu archivo ni he simulado algo como lo tuyo para probarlo. Te propongo, más que copiarlo/pegarlo, tratar de entenderlo y adaptarlo a tu dilema.

Bien, no sé si tengas algún correo para mandarte el archivo 

¿No lo puedes compartir por aquí?

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas