¿Cómo cambio de celda al llegar a determinada cantidad de caracteres?

Tengo una duda espero les sea posible ayudarme, ¿Hay alguna macro que me ayude a que al llegar a 11 caracteres automáticamente cambie a la celda de abajo? ¿Por ejemplo de a1 cambie a a2 y así sucevivamente?

3 respuestas

Respuesta
2

Lo que quieres no se puede hacer en las celdas de Excel porque necesita acabar para contar los caracteres una forma de lograrlo es por medio de un textbox como se ve en la imagen al llegar a 11 captura la informacion en la celda de la columna que este seleccionada y se pasa a la siguiente celda de la misma columna

y esta es la macro

Private Sub TextBox1_Change()
largo = Len(TextBox1.Text)
If largo = 11 Then
ultima = Range("a1").CurrentRegion.Rows.Count
If Range("a1") = Empty Then
    Range("a1").Value = TextBox1.Text
Else
    Range("a1").Rows(ultima + 1).Value = TextBox1.Text
End If
End If
End Sub
Respuesta
2

Leyendo esta consulta y su respuesta se me ocurrió darle una vuelta de tuerca más. Ya veo que está valorada y por lo tanto cerrada pero quizás aún te sirva o para los que la lean a futuro.

El problema con el cuadro de texto tal como está programado, es que dependiendo de la cantidad de celdas que se vayan llenando en algún momento ya no se verá.

En cambio, en la 2da imagen se va trasladando a medida que se rellenan las celdas, con la instrucción:

 'ubicarlo en la línea de la celda
    ActiveSheet.TextBox1.Top = Range("A" & x + 1).Top

La macro completa, a la que le agregué además la opción de que una vez pasado el texto a la hoja se limpie el control activándolo nuevamente para otro ingreso, quedaría de este modo:

Private Sub TextBox1_Change()
'x Elsamatilde
'al limpiar el control no se ejecuta
If TextBox1 = "" Then Exit Sub
'al llegar a 11 vuelca el contenido a la hoja
largo = Len(TextBox1.Text)
If largo = 11 Then
    x = Range("A1").CurrentRegion.Rows.Count
    If Range("A1") = Empty Then
        Range("A1").Value = TextBox1.Text
    Else
        Range("A1").Rows(x + 1).Value = TextBox1.Text
    End If
    'se permite una nueva entrada
    TextBox1 = "": TextBox1.Activate
    'ubicarlo en la línea de la celda
    ActiveSheet.TextBox1.Top = Range("A" & x + 1).Top
End If
End Sub

Sdos.

Elsa

* Más sobre controles en nuevo manual de Userforms

¡Gracias! esta opción complemento lo que necesitaba, es la primera vez que solicito ayuda y me sorprende la capacidad de respuesta muchas gracias a todos he complementado las respuestas que se me dieron y funciona excelente es para una lista de asistencia que estoy haciendo, de verdad muchas gracias!

Esta excelente esta adaptación sin embardo agregue una línea que fuera bajando también la hoja ya que haré más de 100 registros

ActiveWindow.SmallScroll Down:=1

al final la macreo la deje asi 

Private Sub TextBox1_Change()
'x Elsamatilde
'al limpiar el control no se ejecuta
If TextBox1 = "" Then Exit Sub
'al llegar a 11 vuelca el contenido a la hoja
largo = Len(TextBox1.Text)
If largo = 11 Then
x = Range("A1").CurrentRegion.Rows.Count
If Range("A1") = Empty Then
Range("A1").Value = TextBox1.Text
Else
Range("A1").Rows(x + 1).Value = TextBox1.Text
End If
'se permite una nueva entrada
TextBox1 = "": TextBox1.Activate
'ubicarlo en la línea de la celda
ActiveSheet.TextBox1.Top = Range("A" & x + 1).Top
ActiveWindow.SmallScroll Down:=1
End If
End Sub

Perfecto también tu aporte.

Sdos!

Respuesta

Esto

https://www.youtube.com/watch?v=Jw8fmqTyUDk

Debes detectar el target. Row y target. Column

Y pones

If target.column=2  and target.row >1 then

if Len (target.row,target.column) =11 then  (target.row,target.column).offset(1,0).select

end if

Debes ponerlo en la hoja en el evento change mira el ejemplo

El código dice que si la modificación de la celda se produce en cualquier celda de la columna B y en una fila mayor a 1 entonces ejecutará el código que determinar el largo de caracteres si es igual a 11 selecciona la celda siguiente a donde estabas posicionado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas