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
 

Excel Facts

Convert text numbers to real numbers
Select a column containing text numbers. Press Alt+D E F to quickly convert text to numbers. Faster than "Convert to Number"
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.
 
Upvote 0
Juan Pablo,

Por mas que lo intento no logro hacerlo funcionar.

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

Gracias....
 
Upvote 0
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?....
 
Upvote 0
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.
 
Upvote 0
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>
 
Upvote 0
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.
 
Upvote 0
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
 
Upvote 0

Forum statistics

Threads
1,213,556
Messages
6,114,284
Members
448,562
Latest member
Flashbond

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top