Ejecutar macro al cambiar el valor de una celda

Otra vez

Resulta que tengo varias celdas c12, c13, i12 e i13 en las que se crea una lista de validación mediante una macro. Y quiero que al cambiar el valor de esas celdas se ejecute una macro

He estado viendo soluciones que habéis propuesto pero a mi no me funciona, las de worksheet_change,

Y no se como no funciona

Podríais ayudarme

Lo que tengo es

Private Sub Worksheet_Change(ByVal Target As Range)
'Al escribir en la celda C5
If Target.Address = "$C$12" Then
Call CreaList
End If
End Sub

Donde esta el fallo.

Respuesta
4

El evento Worksheet_Change se ejecuta al 'cambio en alguna celda de la hoja'... por lo tanto se coloca en el Editor, en el objeto HOJA (del panel a tu izquierda) en la que vas a controlar los cambios.

Luego se ejecuta al cambio en cualquier celda salvo que le indiques en cual o cuales.

Por ej:

Private Sub Worksheet_Change(ByVal Target As Range)
'Al escribir en la celda C12
If Target.Address = "$C$12" Then
Call CreaList
End If

'aquí podes continuar evaluando otras celdas, por ej en C13

If Target.Address = "$C$13" Then
Call Macro2
End If
End Sub

Y así todas las variantes que necesites.

que es a nivel de la hoja en si ya lo tenia claro gracias a otras publicaciones, suyas y de mas gente, el caso es que yo no escribo nada, es un desplegable que es creado mediante otra macro.

también he probado a crear el evento desde otra celda que yo modifique a mano y tampoco se ejecutaba la macro.

no entiendo por que no lo hace

muchas gracias

¿Podes enviarme la hoja con las macros de creación de listas? Copia el correo que aparece en mi sitio que dejo al pie (o dejame un correo tuyo).

mi correo es [email protected]. si me envías tu uno te respondo y anexo la hoja.

lo que he notado después de escribirte ayer es que me funciono el evento change pero solo por veces, no siempre. un rollo, me estoy volviendo loco

gracias de antemano

Tenés varias macros que al inicio inhabilitan la ejecución de las macros...

Application.EnableEvents.False

Eso está bien para evitar que se vuelva a ejecutas el evento Change (o algún otro) mientras realizás cambios en la hoja... pero hay que volverlo a True antes del End Sub.

y cuales son esas macros.

tenia unas que macros que si se ejecutaban cuando arrancaba la hoja, pero las quite, eran del tipo imputbox, para que cuando abriesen la hoja pudiesen ingresar el numero de ot.

Podrías indicarme donde coloco el enableevents,

gracias

Todas las de los checkbox.

Por ej: te comento ésta:

Sub Verificador1()
Dim lin As Long
Application.EnableEvents = False 'aquí se inhabilitan las macros

If Worksheets("Listas").Range("AQ1") = True Then
For lin = 1 To 7
If lin <> 1 Then Worksheets("Listas").Range("AQ" & lin) = False
Next lin
End If
If Worksheets("Listas").Range("AQ1") = True Then
Range("d11") = "GRAN CORRECTIVO" 'no se ejecuta el evento Change de la hoja (*) pero no importaría que se ejecute xq le pusimos un control para que solo se ejecute en cambios de C12
Else: Range("d11") = ""
End If
Call GranCorr 'VER
If Worksheets("Listas").Range("AQ1") = True Then
Call ListGC 'VER
Else: Call LimpiaMotSal 'VER
End If
End Sub

Perdón, se me escapó la respuesta:

Lo anterior va en todas las de Verificador.

En las que dicen VER, hay que evaluar si el cambio es en la hoja OT, en ese caso si las inabilitamos:

En GranCorr no parece que hiciera falta, los cambios son en hoja LISTA

Sub ListGC()
Application.EnableEvents = False    'impide el evento Change de la celda C12
 Range("c12", "c13").Validation.Delete
 Range("i12", "i13").Validation.Delete
 With Range("c12", "c13").Validation
 .Add Type:=xlValidateList, _
 AlertStyle:=xlValidAlertStop, _
 Operator:=xlEqual, Formula1:="=ListGC"
 With Range("i12", "i13").Validation
 .Add Type:=xlValidateList, _
 AlertStyle:=xlValidAlertStop, _
 Operator:=xlEqual, Formula1:="=ListGC"
 End With
 End With
Application.EnableEvents = True
 End Sub

Lo mismo en LimpiaMotSal.

Ya te envío el libro para que lo veas más claro.

Sdos

Elsa

http://aplicaexel.galeon.com/manuales.htm

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas