Desencadenar un evento al hacer click en una celda

Querría que, al hacer click en una celda de un rango determinado (concretamente G7:G38), excel comprobase si esa celda contiene ya un valor. De ser así, debería mostrar un mensaje (por ejemplo: "Esta celda contiene ya un valor") y en caso contrario debería aumentar el zoom o el tamaño de letra de dicha celda. Debo comentar que las celdas del rango mencionado son listas de validación. El problema es que si asocio una macro que realice dicha función al evento Worksheet_SelectionChange(ByVal Target As Range) de la hoja en cuestión, se desencadena el evento siempre que cualquiera de esas celdas recibe el enfoque, es decir, si estoy en la celda F7 y pulso el tabulador, inmediatamente me muestra un mensaje o aumenta el zoom. El problema es que no deseo que actue así, sino que lo que quiero es que me muestre el mensaje cuando elijo una de las celdas del rango mencionado con la intención de elegir un valor, pero NO en el resto de las ocasiones en las que, al desplazarme por la hoja, alguna de esas celdas recibe el enfoque.

Por otro lado, en lugar de utilizar el siguiente código para aumentar el zoom:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False

Dim RangoDeBusqueda As Range
Set RangoDeBusqueda = Application.Intersect(Target, Range("G7:G38"))
If Not RangoDeBusqueda Is Nothing Then
ActiveWindow.Zoom = 120
Else
ActiveWindow.Zoom = 70
End If

End Sub

Preferiría utilizar:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Cells.Font.Size=10

Target.Font.Size = 25

Target.Columns.Autofit

End Sub
Ya que, con el primero, al aumentar o disminuir el zoom, da la sensación de que la pantalla "se desplaza" y resulta fácil perder de vista la celda que quería modificar...

Es más, este último código, iría bien para utilizar en todas las celdas del rango B7:J38, exceptuando las de la columna G, en las que desearía que se activase exclusivamente cuando se hace click en alguna de ellas. Además, y para complicar más las cosas, en esas celdas en las que se activase con un click, debería "desactivarse" al cambiar de celda (es decir, en la columna G se desencadena el evento para aumentar el tamaño de la fuente al hacer click, volviendo al tamaño original al cambiar de celda...

Buscando por internet, encontré algo que tal vez podría servirme pues hablaba de desencadenar evento al hacer click con el botón izquierdo del ratón, pero no pude llegar a ver el código, pues no estaba registrado y por algún motivo, no pude registrarme (cada vez que lo intentaba, se colgaba...)

Respuesta
3

Podrías tener los 2 eventos: Al seleccionar celdas fuera de los rangos, o dentro del rango B7:J38 y otro al doble clic en las celdas de la col G.

Ahora, como estás mencionando que en col G tenés listas validadas, te aclaro que el aumento en la fuente de la celda no necesariamente te aumentará la fuente en la lista validada.

Como creo que tu objetivo final es ese, lamentablemente con estas opciones no lo lograrás. De todos modos aquí van las macros solicitadas:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'aumenta la fuente en rango B:J excluyendo la col G
If Not Intersect(Target, [B7:F38]) Is Nothing Or Not Intersect(Target, [H7:J38]) Is Nothing Then
    Target.Font.Size = 25
    Target.Columns.AutoFit
    [G7:G38].Font.Size = 10
Else
    Cells.Font.Size = 10
End If
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'aumenta la fuente al doble clic en col G, si la celda está vacía, el resto se mantiene tal como se encuentre
If Not Intersect(Target, [G7:G38]) Is Nothing Then
    If Target.Value = "" Then
        Target.Font.Size = 40
        Target.Columns.AutoFit
    End If
End If
End Sub

Le puse diferente tamaño para ver la diferencia... ajusta a tu gusto.

Si el objetivo es agrandar la fuente de la lista validada no tengo respuesta a eso por ahora.

¡Gracias!  Una vez más, tu ayuda resulta inestimable. En efecto, con este código no se puede agrandar la fuente de la lista validada. Afortunadamente, para casi todo hay solución en esta vida...

Simplemente, aumento el zoom (la opción que prefería no usar, pero no nos queda otra...)

En el evento BeforeDoubleClick le pongo

If Not Intersect(Target, [G7:G38]) Is Nothing Then
  ActiveWindow.Zoom = 120
End if

y, para quitar el zoom  le pongo en el evento SelectionChange

If Intersect(Target, [G7:G38]) Is Nothing Then
  ActiveWindow.Zoom = 70
End if

Y de esta manera, consigo que no se desencadene el evento cada vez que la columna G recibe el enfoque, pero devuelvo a su tamaño real la pantalla cuando salgo de dicha columna.

Muchísimas gracias una vez más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas