Macro para mover a la celda de la derecha pero "respetando" si la celda está bloqueada o no.

Tengo este macro (cortesía de luismondelo de TodoExpertos.com)
Sub auto_open()
Application.OnKey "~", "prueba"
End Sub
Sub prueba()
ActiveCell.Offset(0, 1).Select
End Sub
El tema es que tengo celdas bloqueadas y tengo destildado la opción de "seleccionar celdas bloqueadas", o sea, si yo me muevo con la flecha del teclado, me saltea las celdas bloqueadas, pero si yo ingreso los datos con una lectora de códigos, o le doy "ENTER" (llenando los datos a mano), no me respeta las celdas bloqueadas.
Aparte, la idea es que al finalizar la líneas, como el resto de las celdas están bloqueadas, pase "automáticamente" a la de abajo.
¿Me pueden dar una mano?

1

1 Respuesta

4.700.450 pts. Sancho, si los perros ladran ...

Cambia tu macro prueba, por esta

Sub prueba()
uno = 1
Do While True
'ActiveCell.Offset(0, 1).Select
If ActiveCell.Offset(0, uno).Locked = True Then
uno = uno + 1
Else
ActiveCell.Offset(0, uno).Select
Exit Do
End If
Loop
End Sub

Se va a poner en la siguiente celda de la derecha que no esté bloqueada.

Prueba y me comentas.

Saludos. Dam
Si es lo que necesitas.

Esta genial, me anda casi perfecto, porque cuando llego al final de la fila y debería bajar me da error.

EL VB me lo marca en esta linea:

If ActiveCell.Offset(0, uno).Locked = True Then

No sé como hacer, gracias!

Cambia la macro prueba por esta

Sub prueba()
'por.dam
uno = 1
ucol = Columns.Count
col = ActiveCell.Column
Do While True
'ActiveCell.Offset(0, 1).Select
If uno + col - 1 < ucol Then
    If ActiveCell.Offset(0, uno).Locked = True Then
        uno = uno + 1
    Else
        ActiveCell.Offset(0, uno).Select
        Exit Do
    End If
Else
    'como llegó al final de la fila, entonces se queda en la misma celda
    Cells(ActiveCell.Row, col).Select
    Exit Do
End If
Loop
End Sub

Saludos.Dam

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas