Funcion a macro

11 envíos / 0 nuevos
Último envío
Jesús Martínez
Imagen de Jesús Martínez
Offline
última acción: Hace 3 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 31/03/2013 - 17:15
Puntos: 5008
Funcion a macro

Buenas noches:

Una consulta , tengo esté codigo:

Private Sub Worksheet_Change(ByVal Target As Range)

For Each celda In Target

  If Not Application.Intersect(celda, Range("B32:U1000")) Is Nothing Then

      celda.Interior.Color = vbYellow

  End If

Next

End Sub

El cual esta en el código de la hoja de calculo, pero que cambios se deberia hacer para volverle a código macro? o sea poder ejecutarlo desde un boton.

Gracias

Jesús

Etiquetas: 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Cambia el nombre. En vez de

Cambia el nombre. En vez de llamarle

Private Sub Worksheet_Change(ByVal Target As Range)

Llámale algo así como:

Sub Mifuncion(ByVal Target As Range)

Y luego asigna esta macro a un botón, simplemente con botón derecho->Asignar macro.
Es importante quitarle el "Private" delante, porque si no, no te aparecerá en la lista de macros a seleccionar.

Un saludo
Jesús Martínez
Imagen de Jesús Martínez
Offline
última acción: Hace 3 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 31/03/2013 - 17:15
Puntos: 5008
Negativo

Gracias por la respuesta, pero no llama a la macro, no aparece en mi lista de macros para poder agregarle a  un boton

saludos

Jesús

Jesus Martinez Plantarosa

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Si le has quitado la palabra

Si le has quitado la palabra "private" debería verse. De todas maneras, prueba a hacer un paso más: Donde viene la palabra "private" sustitúyela por "public" y luego termina la definición de la función. Prueba entonces si se puede llamar a la macro para asignarla al botón.

Un saludo

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 9 horas 56 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
sin argumentos

Hola a ambos.

Cuando un procedimiento/macro tiene argumentos, no aparece en la lista de macros, porque desde la lista de macros no se puede dar valor a esos argumentos. En este caso hay un argumento Target en la definición de la macro.

En el evento WorksheetChange Target es el rango que cambia, pero al ejecutar tu macro, ¿qué es Target?
tal vez deberías adaptar tu macro para que se ejecute con la selección o algo parecido

 

------
Ya sé Excel, pero necesito más.

Jesús Martínez
Imagen de Jesús Martínez
Offline
última acción: Hace 3 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 31/03/2013 - 17:15
Puntos: 5008
Gracias

Gracias por la respuesta pero negativo no funciona :(

Jesus Martinez Plantarosa

Jesús Martínez
Imagen de Jesús Martínez
Offline
última acción: Hace 3 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 31/03/2013 - 17:15
Puntos: 5008
Como ??

Estimado Pacomegia, ayuda por favor, como haria mis cambios para que mi macro funcione??

saludos cordiales

Jesús

Jesus Martinez Plantarosa

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Muy buena, Paco. Esa no me la

Muy buena, Paco. Esa no me la sabía.

Jesús: he hecho lo siguiente:

He declarado la función dentro de 'Hoja 1' y no en ningún módulo (aunque se podría hacer con alguna variación):

Sub FuncionFuncionando()

Dim celda As Range

For Each celda In Selection

  If Not Application.Intersect(celda, Range("B32:U1000")) Is Nothing Then

      celda.Interior.Color = vbYellow

  End If

Next

End Sub

 
Tal y como está definida, lo que hace es colorear de amarillo las celdas seleccionadas que estén en el rango que has definido (de B32 a U1000)
Un saludo
Jesús Martínez
Imagen de Jesús Martínez
Offline
última acción: Hace 3 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 31/03/2013 - 17:15
Puntos: 5008
Negativo

Estimado Cron, marca pero solo cuaneo ejecuto la macro y en la celda activa, lo que yo realizo es copiar de otra hoja de otro libro un resumen de ventas a otra hoja, y bueno una vez copiado quiero ejecutar la macro para que cualquier cambio que realize en ese rango de datos los pinte de amarillo, asi yo sabre que datos fueron modificados, desde ya muchas gracias por tu atención.

Saludos cordiales

Jesús

Jesus Martinez Plantarosa

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Bueno, yo no toqué el código,

Bueno, yo no toqué el código, simplemente adapté la función para que se ejecute desde un botón. La función es la que pusiste al principio.

La pregunta es la siguiente: ¿Cómo sabe Excel que se ha modificado una celda? ¿Guardas en algún sitio la distribución original antes de copiar los nuevos datos?

Si es así, te bastaría con un formato condicional bien programado. No recomiendo una comparación celda a celda vía código, porque puede ser desesperantemente lento.

Un saludo

Jesús Martínez
Imagen de Jesús Martínez
Offline
última acción: Hace 3 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 31/03/2013 - 17:15
Puntos: 5008
MMMM

Y como seria el condicional? o sea yo copio de mi hoja original a otra hoja para que revise otra persona, pero lo que quiero es qeu cuando realice cualquier modificación en los datos, estos se pinten de fondo amarillo.

Gracias

Un abrazo

Jesús

Jesus Martinez Plantarosa