Eventos

03/05/2004 - 12:51 por Carlos | Informe spam
Hola a todo
Necesito que se me ejecute una macro cuando me cambie de valor una celda o un rango de celdas
Se que existe un evento que al cambiar la hoja se ejecuta un código, pero lo que me interesa a mi es que ese evento solo se aplique a un rango de celdas. Hay puede decirme si hay forma de hacerlo

Un salud

Carlos

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
03/05/2004 - 13:08 | Informe spam
El evento es Worksheet_Change, y se activa al modificar cualquier celda. Lo que se suele hacer en casos como el tuyo es poner un IF en el código del evento (usando el método Intersect del objeto Application) para determinar si la celda o el rango modificados pertenecen al rango deseado. Si nos dices qué rango es en tu caso, te podremos escribir la instrucción.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Carlos" escribió en el mensaje news:
Hola a todos
Necesito que se me ejecute una macro cuando me cambie de valor una celda o un rango de celdas.
Se que existe un evento que al cambiar la hoja se ejecuta un código, pero lo que me interesa a mi es que ese evento solo se aplique a un rango de celdas. Hay puede decirme si hay forma de hacerlo?

Un saludo

Carlos
Respuesta Responder a este mensaje
#2 Carlos
03/05/2004 - 13:36 | Informe spam
Gracias Fernand
Digamos que el rango que se tiene que ver afectado es el range("R7:U11").
Respuesta Responder a este mensaje
#3 Fernando Arroyo
03/05/2004 - 13:50 | Informe spam
"Carlos" escribió en el mensaje news:
Gracias Fernando
Digamos que el rango que se tiene que ver afectado es el range("R7:U11").



Prueba con:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Me.[R7:U11]) Is Nothing Then
'
'Código a ajecutar si la celda modificada pertenece a R7:U11
'
End If
End Sub

Un saludo.


Fernando Arroyo
MS MVP - Excel
Respuesta Responder a este mensaje
#4 Carlos
03/05/2004 - 14:06 | Informe spam
OK, Fernando, eres un crac
Solo una cosa más. El rango range("R7:U11") es una tabla con fórmulas que hacen rerefencia a otras celdas de la hoja. Me interesa que cuando cambie el valor de esta tabla se ejecute el código pero este evento no se ejecuta, supongo que porque no cambia la función. De todas formas me funciona si lo aplico al rango de celdas con los datos de origen. Hay forma de que se ejecute el código cuando cambia el valor de la celda (pero no cambia el contenido)
Respuesta Responder a este mensaje
#5 Fernando Arroyo
03/05/2004 - 16:48 | Informe spam
"Carlos" escribió en el mensaje news:
OK, Fernando, eres un crack
Solo una cosa más. El rango range("R7:U11") es una tabla con fórmulas que hacen rerefencia a otras celdas de la hoja. Me interesa que cuando cambie el valor de esta tabla se ejecute el código pero este evento no se ejecuta, supongo que porque no cambia la función. De todas formas me funciona si lo aplico al rango de celdas con los datos de origen. Hay forma de que se ejecute el código cuando cambia el valor de la celda (pero no cambia el contenido)?




El evento Change se produce (cito de la ayuda) "cuando alguna celda de la hoja de cálculo es modificada por el usuario o por un vínculo externo".

Un cambio de valor de una celda que se produzca como consecuencia del recálculo de su fórmula no activa el evento Change, sino el evento Calculate, pero con este evento no es posible saber qué celda o celdas han sido modificadas.

Concretando, para averiguar si el rango R7:U11 de (por ejemplo) Hoja1 ha sido modificado por un recálculo, es necesario "monitorizar" las celdas, para lo cual hay que:

- poner la siguiente instrucción en la sección de declaraciones (al principio) de un módulo creado por ti:

Public mtrR As Variant

- pegar el siguiente código en el módulo del libro (ThisWorkbook):

Private Sub Workbook_Open()
mtrR = Range("Hoja1!R7:U11") 'Suponiendo que el rango R7U11 esté en Hoja1
End Sub

- pegar el siguiente código en el módulo de Hoja1:

Private Sub Worksheet_Calculate()
Dim n As Byte, j As Byte
For n = 1 To 5
For j = 1 To 4
If mtrR(n, j) <> [R7:U11].Cells(n, j) Then
'
'Código para cuando cambie algún valor de Hoja1!R7:U11
'
Exit Sub
End If
Next j
Next n
End Sub


Un saludo.


Fernando Arroyo
MS MVP - Excel
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida