Siguiente celda libre

Hola de Nuevo...
Expert necesito que me orientes en algo... Recuerdas que el día de hoy habías respondido una pregunta que tenia sobre como llamar las hojas desde una aplicación que realice en VB con unas pestañas y todo eso... Bueno... Ahora mi pregunta es como puedo encontrar la siguiente celda de cada columna que esté libre, es decir, de donde terminan los datos, la siguiente para que el programa la seleccione y el usuario ingrese los datos.
Pasa que en la actual aplicación solo tengo que se ingresan los datos en la primera fila y los demás datos bajan, es decir... Mi primera celda es la A4, al ingresar los datos, estos pasan a la A5 y la A4 queda libre para el siguiente y no creo que sea muy "objetivo" esto, lo que necesito es que no sea la A4 sino por ejemplo la A15 ya que en las de arriba hay datos...
En lo que me puedas ayudar mil gracias de nuevo
Gabo Duque

1 respuesta

Respuesta
1
Si los datos están de manera continua uno abajo del otro, puedes hacerlo así:
x = LTrim(Str(Range("A1").End(xlDown).Row + 1))
Range("A" & x).Value = TextBox1.Text

Como verás, lo que hace el código es colocar en la variable "x" la fila de la última celda y le suma 1 para que sea la siguiente hacia abajo. Luego concatenas este número con la letra de la columna y le pasas el valor del objeto que deseas (por ejemplo un TextBox).
Expert... Hay un problema, al implementar el cod que me acabas de informar lo que hace el programa es que cada letra que ingreso la pone en las celdas siguientes, es decir si tecleo ASDF en la celda A1 PONE A, EN LA A2 PONE AS, EN LA A3 PONE ASD Y EN LA A4 PONE ASDF...
¿Qué me sugieres para evitar esto?
No tiene mucho sentido lo que me dices ya que el código que te envié lo que hace es colocar el valor que se encuentre en el objeto en la celda que se identificó como última. Pienso que quizás cometiendo algún error en el programa.
Revisa y si no encuentras el error me avisas nuevamente.
Hola de Nuevo!
No, aun continua con el mismo error, es más... Chequea el código para que lo pruebes, sigue apareciendo la misma cadena que te comente anteriormente.
Private Sub TextBox1_Change()
Sheets("Adm_Aprendizaje").Activate
---> Aqui va el código que me enviaste <---------
ActiveCell.FormulaR1C1 = "DGHO-UAO-AAO-" + TextBox1
Do While ActiveCell <> Empty
ActiveCell.FormulaR1C1 = UCase(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Pienso que debería ser así:
Private Sub TextBox1_Change()
Sheets("Adm_Aprendizaje").Activate
x = LTrim(Str(Range("A1").End(xlDown).Row + 1))
Range("A" & x).Select
ActiveCell.FormulaR1C1 = "DGHO-UAO-AAO-" + TextBox1
'<<No sé que hace esta parte de abajo>>

Do While ActiveCell <> Empty
ActiveCell.FormulaR1C1 = UCase(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Expert... de Nuevo
Probé el código tal cual lo enviaste pero continuo con el problema que escribe cada letra más las anteriores en diferentes celdas como te comente antes.
Te aclaro que el código que sigue ahí es para tomar todos los datos que el user ingresa en el textbox y los cambia a mayúsculas.
Alguna otra solución, ¿ya qué con esa continuamos con el problema?
Saludos
En ese caso lo que veo es que puedes dejarlo así:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Sheets("Adm_Aprendizaje").Activate
    x = LTrim(Str(Range("A1").End(xlDown).Row + 1))
    Range("A" & x).Value = "DGHO-UAO-AAO-" + UCASE(TextBox1)
End Sub

Pienso que no debes utilizar el evento Change del textbox, porque este evento se ejecuta cada que ingresas un carácter (por eso te quedaba cada carácter debajo del otro). Quizás este evento (Exit) puede funcionarte mejor pues se ejecutará cuando termines de ingresar el dato y salgas hacia otro objeto.
Finalmente, todo lo que tenías puede resumirse en esas tres líneas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas