La otra vez preguntaba como hacer determinadas tareas si
el usuario cambiaba un valor de un rango de celdas
determinado.
Lo que me dijeron (Fernando Arroyo) que lo pongo abajo
anda perfecto pero hay una sola cosa que NO me funciona y
me es fundamental. En realidad cuando te decía que tenía
3 comboboxs hechos con el menú Data\Validation NO era tan
así sino que tenía 1 combobox y las otras 2 celdas están
con un fórmula de un programa que si le hago doble clic
me aparece una lista de valores y tengo que elegir uno.
El GRAN problema es que cuando cambio un valor de estas 2
celdas haciendo doble clic y eligiendo otro elemento NO
se activa el evento "Worksheet_Change" con lo cual NO
hace lo que quiero.
Podré usar algún otro evento que si me reconozca el
cambio de elemento en la celda?????
(El evento Worksheet_SelectionChange SI se ejecuta
correctamente)
PREGUNTA Y RESPUESTA ANTERIOR:
Hacer varias cosas cuando se cambia el valor de una
celda???
Tengo 3 comboboxs hechos con el menú Data\Validation y en
la solapa Settings le pongo List y en Source los valores
(ej. para el combo de años le pongo de 1990 a 2004).
Hasta acá todo bien.
El tema que cuando el usuario elige un valor distinto en
cualquiera de estos combos (que están en A5, A6 y A7), se
tiene que borrar el contenido de las celdas B15, B16, B17
y B18 de la Hoja 1, las celdas C4, C5 y C6 de la Hoja2 y
presionar el botón Refrescar de la Hoja1 (que es un botón
que cree yo llamando a una macro de un programa de
terceros).
Cómo puedo hacer esto???
Rta:
Entiendo que el borrado de celdas tan sólo debe
producirse si alguna de las celdas en el rango A5:A7 de
Hoja1 cambia su valor ¿?. Si es esto, el siguiente código
debería servirte:
Dim vAnterior As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, [A5:A7]) Is Nothing
Or Target = vAnterior Then Exit Sub
Application.EnableEvents = False
[B15:B18].ClearContents
Worksheets("Hoja2").[C4:C6].ClearContents
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
If Not Application.Intersect(Target, [A5:A7]) Is
Nothing And Target.Cells.Count = 1 Then vAnterior = Target
End Sub
Tendrías que ponerlo en el módulo de Hoja1, y lo que hace
es almacenar en una variable el contenido de la celda en
el momento de seleccionarla, y si se cambia su valor
borrar las celdas que necesitas (es decir, que si al
salir de la celda su valor no ha cambiado, no se borrarán
las otras).
Respecto a lo del botón, en principio no parece necesario
presionarlo. Dado que dices que llama a otro código, lo
único que tendrías que hacer es ejecutar dicho código
mediante el método Run del objeto Application. Esta
llamada podrías ponerla después de
Application.EnableEvents = True
Leer las respuestas