Macro que se active al abrir la hoja.

Hola,

no sé si se podrá hacer, pero me gustaría que al abrir una hoja de excel, en la hoja1 el cursor siguiera la siguiente ruta al tabular o al apretar Intro.

- Que al abrir la hoja se seleccione la celda f1 (aunque al cerrar la hoja no se haya dejado seleccionada).

- Que al tabular (desde f1) pase a la celda f2, al tabular de nuevo a la c4 y al tabular otra vez a la c5... Y que si se vuelve a tabular comience otra vez por la f1. Una especie de rueda con 4 celdas (f1,f2,c4,c5).

Sé que se puede hacer desbloqueando celdas y bloqueando la hoja, pero es que tengo celdas por medio que no quiero bloquear, pero que raramente tengo que poner datos, vamos que me ahorraría muchas tabulaciones. Gracias por adelantado.

Saludos

Manu

1 respuesta

Respuesta
1

Entrá al Editor, seleccioná con doble clic el objeto HOJA donde vayas a trabajar y allí copiá esta macro. Tendrás que completarla como te lo indico allí:

Private Sub Worksheet_Change(ByVal Target As Range)

'x Elsamatilde

If Target.Address = "$F$1" Then 'paso a F2
Target.Offset(1, 0).Select
ElseIf Target.Address = "$F$2" Then 'paso a C4
Range("C4").Select
elseif 'siguen tus condiciones (*)
End If
End Sub

(*) Fijate que es lo mismo trabajar con Target.Offset o Range("...")

En el mismo objeto HOJA colocá esta para que siempre se inicie en F1:

Private Sub Worksheet_Activate()
Range("F1").Select
End Sub

Sdos y no dejes la consulta sin finalizar si todo quedó aclarado.

Hola Elsa, gracias por tu ayuda.

He copiado tu ejemplo en una hoja en blanco y algo hago mal porque no me funciona, no se mueve de f1 a f2 y luego a c4

te pongo una imagen....

y luego una duda con la "síntesis" (ó como se diga) de la macro, perdona pero mis conocimientos son muy escasos. Dices que es igual usar "Target.Offset" que "range" y esto es lo que me despista para poder adaptarla.

- En el ejemplo, primero le dices que si está en F1 (que con la segunda parte del código entiendo que al abrir la hoja ya empieza ahí)...

- "Target.Offset(1, 0).Select" esto no es que baje una línea?lo haces para que pase a F2?

- "ElseIf Target.Address = "$F$2" Then" aquí le dices que si está en F2 entonces...

- "Range("C4").Select" pase a C4... y C4 lo pones sin fijar ($).

Osea que si elijo usar sólo "range", me puedes poner un ejemplo con sólo un movimiento por ejemplo de A1 a A8, a ver si soy capaz de adaptarlo. Gracias.

Saludos

Manu

El evento que utilizo es Worksheet_Change... es decir que se ejecuta al cambiar el contenido de la celda ... así podemos ingresar datos solo en celdas habilitadas

Y la celda destino, es decir a qué celda debe pasar se puede indicar tanto con su referencia del tipo Range("C4") como con la expresión Offset que indica a cuántas filas y col de distancia de la original. Usá cualquiera de las 2.

Para que quede más claro cuáles son las celdas habilitadas usaré la ref:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
If Target.Address = "$F$1" Then 'paso a F2
Range("F2").Select
ElseIf Target.Address = "$F$2" Then 'paso a C4
Range("C4").Select
elseif Target.Address = "$C$4" Then 'paso a C5
Range("C5").Select

'otros

End If
End Sub

¿Por qué no coloco los signos $? Porque no hacen falta, los utilizo cuando quiero asignar una referencia absoluta a una celda o Target:.

Target.Address = "$F$1"

Si fuese una referencia relativa sería: Target.Address(false, false) = "F1"

En tu caso sería lo mismo (absoluta o relativa) xq solo se posiciona allí... es para escribir menos.

¿Quedó más claro?

Madre mia! tengo la inteligencia justa para pasar el día, funciona perfectamente....

lo que pasa es que yo la estaba probando sólo con el tabulador (sin escribir nada) y claro así no se movía a las celdas concretas. Ahora me queda claro como funciona, esta me la guardo pues resulta muy útil.

Muchas Gracias Elsa :)

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas