Ejecucion de macro al cambiar el valor de una celda

Controller

New Member
Joined
Jun 19, 2002
Messages
27
Hola a todos!

¿Como puedo hacer que una macro se ejecute automaticamente cade vez que cambia el valor de una celda?

Tengo una macro que pivota una tabla con distintos valores en funcion del mes, ahora mismo cada vez que cambio el mes, tengo que ejecutar la macro para que la "pivot table" se actualice. El valor del mes se encuentra en una celda concreta.

Gracias por la ayuda
 

Juan Pablo González

MrExcel MVP
Joined
Feb 8, 2002
Messages
11,959
Esto se hace con el evento Change() de la hoja, así:

<pre>Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then MiMacro
End Sub</pre>

Esto llamaría el macro MiMacro cada vez que la celda A1 cambie.
 

Controller

New Member
Joined
Jun 19, 2002
Messages
27
¡Eso es rapidez en contestar, si señor!

Mil gracias y saludos desde San Sebastian, España....
 

Controller

New Member
Joined
Jun 19, 2002
Messages
27
Juan Pablo,

Por mas que lo intento no logro hacerlo funcionar.

¿Donde deben insertarse esas lineas de código? ¿En mi propia macro?....

Gracias....
 

valedor

New Member
Joined
Aug 1, 2002
Messages
15
1.- Entra al libro donde quieras poner el codigo
2.- Entra al Editor del Visual Basic (Alt+F11)
3.- Da un doble click en la hoja donde te interese dejar el codigo, esta la veras en el Explorador de proyectos, si no lo ubicas en el siguiente vinculo hay una breve descripcion de esta ventana

http://www.vbalym.netfirms.com/intro.html

4.- Despues del doble click, en la ventana de codigo, copia el codigo que te envio Juan Pablo
5.- Por supuesto la macro a la que llamas debe de existir en un modulo de codigo



¿Donde deben insertarse esas lineas de código? ¿En mi propia macro?....
 

Torno

New Member
Joined
Oct 3, 2013
Messages
1
Esto se hace con el evento Change() de la hoja, así:


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then MiMacro
End Sub

Esto llamaría el macro MiMacro cada vez que la celda A1 cambie.

y si es un rango de celdas ?? como seria esa linea ???
por ejemplo mi macro es esta:

Sub limitartexto()
Dim limite As Object
Range("A2:G100").Select
For Each limite In Selection
limite.Value = Left(limite, 5)
Next
End Sub
Saludos.
 

Greg Truby

MrExcel MVP
Joined
Jun 19, 2002
Messages
9,999
Bueno, vamos a suponer que usted dió el rango de celdas que vas a observar el nombre "rngCeldasEspeciales". Entonces cada vez que usted cambia una celda o celdas multiples que se encuentran dentro de rango observado (y nombrado), su macro correrá.

<font face=Consolas, "Lucida Sans Typewriter", "Lucida Console", "Courier New", Monospace><SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Sub</SPAN> Worksheet_Change(<SPAN style="color:#00007F">ByVal</SPAN> Target <SPAN style="color:#00007F">As</SPAN> Range)<br><br>    <SPAN style="color:#00007F">Const</SPAN> c_strNameOfMonitored <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN> = "rngCeldasEspeciales"<br><br>    <SPAN style="color:#00007F">Dim</SPAN> rngIntersect    <SPAN style="color:#00007F">As</SPAN> Excel.Range, _<br>        rngMonitored    <SPAN style="color:#00007F">As</SPAN> Excel.Range<br>        <br>    <SPAN style="color:#00007F">Set</SPAN> rngMonitored = Me.Range(c_strNameOfMonitored)<br>    <br>    <SPAN style="color:#00007F">On</SPAN> <SPAN style="color:#00007F">Error</SPAN> <SPAN style="color:#00007F">Resume</SPAN> <SPAN style="color:#00007F">Next</SPAN><br>    <SPAN style="color:#00007F">Set</SPAN> rngIntersect = Application.Intersect(Target, rngMonitored)<br>    <br>    <SPAN style="color:#00007F">If</SPAN> <SPAN style="color:#00007F">Not</SPAN> rngIntersect <SPAN style="color:#00007F">Is</SPAN> <SPAN style="color:#00007F">Nothing</SPAN> <SPAN style="color:#00007F">Then</SPAN><br>    <br>        myMacro rngIntersect<br>        <br>    <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN><br>    <br><SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN><br><br><SPAN style="color:#00007F">Sub</SPAN> myMacro(<SPAN style="color:#00007F">ByRef</SPAN> rngCellsChanged <SPAN style="color:#00007F">As</SPAN> Excel.Range)<br><br>    MsgBox "The address of the cell(s) you changed was:" _<br>            & vbCr & vbCr & rngCellsChanged.Address(False, False), vbInformation<br><br><SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN><br></FONT>
 

Greg Truby

MrExcel MVP
Joined
Jun 19, 2002
Messages
9,999
Bueno, ahora que he contestado la pregunta que usted sí hizo, una pregunta para usted. Los datos que usted está cortando. ¿Están importados de otro archivo o pegados con copiar y pegar? ¿O están teclados a mano? Porque si están teclados a mano, usted podría usar validación de datos para limitar el largo del valor entrado a la celda.
 

sebascadavid123

New Member
Joined
May 16, 2015
Messages
2
Greg, me puedes explicar el codigo que utilizaste por favor para correr la macro si se cmabia el rango? soy nuevo en esto...
Gracias, Saludos
 

Forum statistics

Threads
1,077,780
Messages
5,336,257
Members
399,073
Latest member
fairoos

Some videos you may like

This Week's Hot Topics

Top