Obtener el valor de una celda al hacer un solo click sobre ella

He visto una solución que daba Elsa Matilde para, haciendo doble click sobre una celda, ejecutar una macro o un evento determinado. Mi problema es que necesito que se ejecute el código al hacer un solo click. He leído que podría asociarlo al evento Private Sub Worksheet_SelectionChange(ByVal Target As Range), pero me surgen una serie de problemas:

En primer lugar, el rango de celdas sobre el que deseo aplicar el nuevo evento, está formado por listas de validación. Como quiera que la letra de estas listas es muy pequeñita, le he puesto el siguiente código (que también obtuve en este magnífico foro) a fin de aumentar el zoom y luego volverlo a poner en su tamaño:

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 =74

End If

End Sub

Bien, resulta que lo que yo necesito, es que, al seleccionar cualquier celda de ese rango a fin de cambiar su valor mediante el desplegable de la lista de validación, el valor que tiene dicha celda (antes de cambiarlo) pase a la celda DC12 de otra hoja del mismo libro. Me explico: Este código esta en la Hoja llamada "mes". Si, por ejemplo, en la celda G10 hay un valor seleccionado (digamos "Vacaciones") y quiero cambiar ese valor por otro de la lista (por ejemplo "Baja Médica"), lo que necesito hacer es que la celda DC12 de la hoja "calendario" (en el mismo libro) tome el valor inicial de la lista, es decir "Vacaciones", y que dicha celda DC12 no cambie cuando yo seleccione otro valor de esa lista en G10. Decir además que, en esa misma hoja, tengo también código asociado al evento Private Sub Worksheet_Change(ByVal Target As Range), por lo que el código o la macro que ponga, no debe interferir con otros eventos...

¿Me podríais indicar si hay alguna forma de conseguir esto?

1 respuesta

Respuesta
2

Podrías colocar la instrucción del guardado al momento de seleccionar la celda, antes de modificarla, en este caso G10.

If Not RangoDeBusqueda Is Nothing Then
ActiveWindow.Zoom = 120
Sheets("Calendario").[D12] = Target.Value

Pero esto conlleva el riesgo de que a lo mejor solo la seleccionas pero no la cambias... entonces mejor guardarla en una celda auxiliar.

If Not RangoDeBusqueda Is Nothing Then
ActiveWindow.Zoom = 120
Sheets("Calendario").[X1] = Target.Value     'coloca la referencia de tu celda aux

Y entonces al cambiar el valor de alguna celda del rango recién mover el valor guardado.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim RangoDeBusqueda As Range
Set RangoDeBusqueda = Application.Intersect(Target, Range("G7:G38"))
If Not RangoDeBusqueda Is Nothing Then
Sheets("Calendario").[D12] = Sheets("Calendario").[X1]
End If

Por supuesto que aquí quedaría por ajustar dónde se guarda cada una de las celdas del rango, si solo se guarda la última modificada.... y conocer tu macro del evento Change, que no me quedó claro en cual de las hojas la tenés. 

¡Gracias! Perdón por no haber respondido antes, pero he tenido problemas con Internet y no he podido entrar hasta hace escasamente unos minutos. Pude ver la respuesta desde el trabajo, pero desde ahí, no tenemos permitido entrar a ningún foro :( 

Decirte que haciéndolo como tu me dices, me funciona sin problema... La macro está en el evento change de la hoja "mes", y el código para aumentar el zoom, lo tengo en el evento SelectionChange de la misma hoja. Lo he probado y, de momento, funciona todo perfectamente. 

Gracias una vez más por tu ayuda. Como siempre... ¡Excelente!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas