Evento Change no ejecuta con mouse

07/11/2006 - 17:42 por CSICMEL Portales y Páginas Web | Informe spam
Hola Estimados amigos,

Tengo alguna macro en las hojas de la forma

Private Sub Worksheet_Change(ByVal Target As Range)

Call Mi_Macro(Target, ActiveSheet.Name)

End Sub

En Mi Macro hago distintas cosas, según el rango editado.

En general, entra a la macro y pasa por todas las subrutinas que he
definido, pero he notado que cuando hago un cambio en la hoja a mano, es
decir, escribo el valor y presiono Enter, los rangos del tipo:

Range(Rango_a_Procesar).Select

Donde Rango_a_Procesar puede tener por ejemplo= "$C$4:$C$50"

Se activan y se ejecutan correctamente formateando y haciendo las cosas que
yo espero.

Pero si el cambio en la hoja (para gatillar el evento) lo realizo con el
mouse a través del botón de lista de validación que tengo en las hojas,
entonces, la macro se ejecuta y entra por todas las subrutinas, pero los
rango no los "selecciona" y con ello no formatea lo que necesito. Incluso en
las rutinas puse al comienzo:

Worksheets(Nombre_de_Hoja).Activate

.
.
.

Range(Rango_a_Procesar).Select

Al revisar Target, efectivamente, en ambos casos, el contenido de la celda
editada ha cambiado, pero en el caso de haberlo hecho con el mouse y lista de
validación, no se seleccionan los rangos dinámicos que calculo, y sí lo hace
cuando edito la celda a mano, escribiendo y presionando Enter.

Tenía entendido, que el "Worksheet_Change" notaba un cambio en la celda y se
ejecutaba y de hecho entra y se ejecuta el código, pero no cumple las
seleciones de rango y no entiendo porqué si incluso estoy gatillando el
evento desde una hoja activa y más aún , la activo nuevamente en la subrutina.

He aprendido muchas cosas desde aquí y leyendo además la ayuda pero como
verán no soy muy avanzado en algunas cosas y agradezco cualquier ayuda o
comentario.

No incluyo las rutinas porque son varias y largas y de hecho, repito por si
no se entendió, el código funciona bien cuando la celda editada que pertenece
al rango que estoy "vigilando" lo hago con el teclado, pero no se
"selecciona" los rangos si el cambio de valor lo hago a través de la lista de
validación con el mouse.

Muchísimas Gracias por cualquier comentario y ayuda.

Saludos,

Hugo Miguel Angel
Muchísimas Gracias por vuestra ayuda.

CSICMEL Portales y Páginas web
www.assalamo-alaikum.com
www.aquiopinoyo.cl

Preguntas similare

Leer las respuestas

#1 CSICMEL Portales y Páginas Web
07/11/2006 - 18:01 | Informe spam
Estoy revisando unas versiones anteriores y se ejecuta bien, con teclado y
ratón, así que algo cambié yo, que ahora no lo hace, estoy buscando mayor
información, aunque no sé qué provoca el cambio entre un libro y otro. Junto
con otros cambios, ordené las rutinas y funciones en módulos separados y con
nombres para saber que hay adentro, asi que voy a investigar más.

Gracias


Muchísimas Gracias por vuestra ayuda.

CSICMEL Portales y Páginas web
www.assalamo-alaikum.com
www.aquiopinoyo.cl


"CSICMEL Portales y Páginas Web" wrote:

Hola Estimados amigos,

Tengo alguna macro en las hojas de la forma

Private Sub Worksheet_Change(ByVal Target As Range)

Call Mi_Macro(Target, ActiveSheet.Name)

End Sub

En Mi Macro hago distintas cosas, según el rango editado.

En general, entra a la macro y pasa por todas las subrutinas que he
definido, pero he notado que cuando hago un cambio en la hoja a mano, es
decir, escribo el valor y presiono Enter, los rangos del tipo:

Range(Rango_a_Procesar).Select

Donde Rango_a_Procesar puede tener por ejemplo= "$C$4:$C$50"

Se activan y se ejecutan correctamente formateando y haciendo las cosas que
yo espero.

Pero si el cambio en la hoja (para gatillar el evento) lo realizo con el
mouse a través del botón de lista de validación que tengo en las hojas,
entonces, la macro se ejecuta y entra por todas las subrutinas, pero los
rango no los "selecciona" y con ello no formatea lo que necesito. Incluso en
las rutinas puse al comienzo:

Worksheets(Nombre_de_Hoja).Activate

.
.
.

Range(Rango_a_Procesar).Select

Al revisar Target, efectivamente, en ambos casos, el contenido de la celda
editada ha cambiado, pero en el caso de haberlo hecho con el mouse y lista de
validación, no se seleccionan los rangos dinámicos que calculo, y sí lo hace
cuando edito la celda a mano, escribiendo y presionando Enter.

Tenía entendido, que el "Worksheet_Change" notaba un cambio en la celda y se
ejecutaba y de hecho entra y se ejecuta el código, pero no cumple las
seleciones de rango y no entiendo porqué si incluso estoy gatillando el
evento desde una hoja activa y más aún , la activo nuevamente en la subrutina.

He aprendido muchas cosas desde aquí y leyendo además la ayuda pero como
verán no soy muy avanzado en algunas cosas y agradezco cualquier ayuda o
comentario.

No incluyo las rutinas porque son varias y largas y de hecho, repito por si
no se entendió, el código funciona bien cuando la celda editada que pertenece
al rango que estoy "vigilando" lo hago con el teclado, pero no se
"selecciona" los rangos si el cambio de valor lo hago a través de la lista de
validación con el mouse.

Muchísimas Gracias por cualquier comentario y ayuda.

Saludos,

Hugo Miguel Angel
Muchísimas Gracias por vuestra ayuda.

CSICMEL Portales y Páginas web
www.assalamo-alaikum.com
www.aquiopinoyo.cl
Respuesta Responder a este mensaje
#2 CSICMEL Portales y Páginas Web
08/11/2006 - 13:47 | Informe spam
He relacionado la etiqueta:

Application.ScreenUpdating

Al comenzar las macros hago una desactivación de esta propiedad a False. En
versiones anteriores de mi plantilla, funciona bien, pero en la que tengo
ahora, cuando accedo a la hoja mediante teclado y al depurar el código y
revisar el estado de esta propiedad, veo que se encuentra efectivamente en
False y con lo cual, todo se ejecuta bien, pero al cambiar un dato con el
ratón, y depurar el código, esta propiedad se encuentra en True, aún siendo
que puse una directiva antes del Flag forzando a False y con ello, entonces,
los rangos no son seleccionados y no formatea la hoja como deseo.

Que cosas puedo revisar? he mirado por todas partes y no sé qué buscar, no
entiendo cómo es que hace esta diferencia entre un libro y otro.

Uso la versión Excel 2003.

Muchísimas Gracias por vuestra ayuda.

CSICMEL Portales y Páginas web
www.assalamo-alaikum.com
www.aquiopinoyo.cl


"CSICMEL Portales y Páginas Web" wrote:

Estoy revisando unas versiones anteriores y se ejecuta bien, con teclado y
ratón, así que algo cambié yo, que ahora no lo hace, estoy buscando mayor
información, aunque no sé qué provoca el cambio entre un libro y otro. Junto
con otros cambios, ordené las rutinas y funciones en módulos separados y con
nombres para saber que hay adentro, asi que voy a investigar más.

Gracias


Muchísimas Gracias por vuestra ayuda.

CSICMEL Portales y Páginas web
www.assalamo-alaikum.com
www.aquiopinoyo.cl


"CSICMEL Portales y Páginas Web" wrote:

> Hola Estimados amigos,
>
> Tengo alguna macro en las hojas de la forma
>
> Private Sub Worksheet_Change(ByVal Target As Range)
>
> Call Mi_Macro(Target, ActiveSheet.Name)
>
> End Sub
>
> En Mi Macro hago distintas cosas, según el rango editado.
>
> En general, entra a la macro y pasa por todas las subrutinas que he
> definido, pero he notado que cuando hago un cambio en la hoja a mano, es
> decir, escribo el valor y presiono Enter, los rangos del tipo:
>
> Range(Rango_a_Procesar).Select
>
> Donde Rango_a_Procesar puede tener por ejemplo= "$C$4:$C$50"
>
> Se activan y se ejecutan correctamente formateando y haciendo las cosas que
> yo espero.
>
> Pero si el cambio en la hoja (para gatillar el evento) lo realizo con el
> mouse a través del botón de lista de validación que tengo en las hojas,
> entonces, la macro se ejecuta y entra por todas las subrutinas, pero los
> rango no los "selecciona" y con ello no formatea lo que necesito. Incluso en
> las rutinas puse al comienzo:
>
> Worksheets(Nombre_de_Hoja).Activate
>
> .
> .
> .
>
> Range(Rango_a_Procesar).Select
>
> Al revisar Target, efectivamente, en ambos casos, el contenido de la celda
> editada ha cambiado, pero en el caso de haberlo hecho con el mouse y lista de
> validación, no se seleccionan los rangos dinámicos que calculo, y sí lo hace
> cuando edito la celda a mano, escribiendo y presionando Enter.
>
> Tenía entendido, que el "Worksheet_Change" notaba un cambio en la celda y se
> ejecutaba y de hecho entra y se ejecuta el código, pero no cumple las
> seleciones de rango y no entiendo porqué si incluso estoy gatillando el
> evento desde una hoja activa y más aún , la activo nuevamente en la subrutina.
>
> He aprendido muchas cosas desde aquí y leyendo además la ayuda pero como
> verán no soy muy avanzado en algunas cosas y agradezco cualquier ayuda o
> comentario.
>
> No incluyo las rutinas porque son varias y largas y de hecho, repito por si
> no se entendió, el código funciona bien cuando la celda editada que pertenece
> al rango que estoy "vigilando" lo hago con el teclado, pero no se
> "selecciona" los rangos si el cambio de valor lo hago a través de la lista de
> validación con el mouse.
>
> Muchísimas Gracias por cualquier comentario y ayuda.
>
> Saludos,
>
> Hugo Miguel Angel
> Muchísimas Gracias por vuestra ayuda.
>
> CSICMEL Portales y Páginas web
> www.assalamo-alaikum.com
> www.aquiopinoyo.cl
Respuesta Responder a este mensaje
#3 CSICMEL Portales y Páginas Web
09/11/2006 - 18:50 | Informe spam
Hola nuevamente,

Al revisar varias hojas he notado lo siguiente:

Al colocar una fórmula usando indirecto(ref) en cualquier celda de cualquier
hoja, no se me cambia de estado la propiedad Application.ScreenUpdate de True
a False, aunque la fuerza en línea previa y con ello no selecciona rangos
dentro de la hoja activa. Es decir, cuando se cambian datos a traves de las
listas de validación, si la hoja tiene en alguna celda un formula con
indirecto, entonces, no se seleccionarán rango usando Range(String).Select,
todo lo demás se hace, cambiar valores específicos de alguna celda como
Cells(2,3).Value = nuevo valor, lo hará perfectamente, pero cuando quiero
tomar un rango para formatearle color por ejemplo u otra cosa, no lo hará.
Esto no sucede si los cambios se hacen con el teclado. No he probado en otro
PC, he revisado las opciones entre un libro y otro, pero esto es lo único que
he notado que hace la diferencia entre una situación y la otra.

En mis hojas, uso mucho el Indirecto para establecer rangos dinámicos de
cálculo a partir de un celda basica y contando filas y columnas con datos,
pero ahora veo este inconveniente; estoy usando la versión 2003 de Excel, mi
empresa la ha comprado hace tiempo ya y no creo que se cambie a otra mayor
por lo pronto, así que esto (como otras varias cosas) me sacan de contexto
con estos famosos productos Micro...

Bueno, hasta el momento nadie ha respondido, puede ser que nadie haya notado
esto, o simplemente todavía tengo algo cambiado en la configuración y no sé
que parámetro será.

Mi plantilla lo que hace es simular una base de datos, cuando escribes un
Rotulo al lado del último, con un evento change formateo esa nueva columna
con la configuración de la última. Si agregas un valor por la última fila en
la primera columna de la base de datos, copia todas las fórmulas a esa nueva
fila desde la anterior y formatea como la anterior, actualizo los rangos, más
unas referencias por nombre me ayudan después a buscar cualquier dato dentro
de ella, pueden ordenarse por cualquier columna sin romper los datos ocultos
de cálculos para los rangos de validación o referencia. Además coloqué unos
celdas tipo llave para proteger los datos o formulas y no borrarlas
accidentalmente. Todo funciona bien, excepto que cuando realizo un cambio con
lista de validación, los formateo de colores u otras cosas, tengo que
hacerlas a mano porque aunque entra en la rutina Change, no selecciona rangos.

Nuevamente, si alguien sabe qué me falta para o qué cosa no estoy
considerando, se lo agradecería.

Demás está decir que para cualquier información en la cual yo pueda ayudar,
con lo poco que sé aún, igual puedo intentar o mostrar algunos ejemplos.

Gracias.

Muchísimas Gracias por vuestra ayuda.

CSICMEL Portales y Páginas web
www.assalamo-alaikum.com
www.aquiopinoyo.cl


"CSICMEL Portales y Páginas Web" wrote:

Hola Estimados amigos,

Tengo alguna macro en las hojas de la forma

Private Sub Worksheet_Change(ByVal Target As Range)

Call Mi_Macro(Target, ActiveSheet.Name)

End Sub

En Mi Macro hago distintas cosas, según el rango editado.

En general, entra a la macro y pasa por todas las subrutinas que he
definido, pero he notado que cuando hago un cambio en la hoja a mano, es
decir, escribo el valor y presiono Enter, los rangos del tipo:

Range(Rango_a_Procesar).Select

Donde Rango_a_Procesar puede tener por ejemplo= "$C$4:$C$50"

Se activan y se ejecutan correctamente formateando y haciendo las cosas que
yo espero.

Pero si el cambio en la hoja (para gatillar el evento) lo realizo con el
mouse a través del botón de lista de validación que tengo en las hojas,
entonces, la macro se ejecuta y entra por todas las subrutinas, pero los
rango no los "selecciona" y con ello no formatea lo que necesito. Incluso en
las rutinas puse al comienzo:

Worksheets(Nombre_de_Hoja).Activate

.
.
.

Range(Rango_a_Procesar).Select

Al revisar Target, efectivamente, en ambos casos, el contenido de la celda
editada ha cambiado, pero en el caso de haberlo hecho con el mouse y lista de
validación, no se seleccionan los rangos dinámicos que calculo, y sí lo hace
cuando edito la celda a mano, escribiendo y presionando Enter.

Tenía entendido, que el "Worksheet_Change" notaba un cambio en la celda y se
ejecutaba y de hecho entra y se ejecuta el código, pero no cumple las
seleciones de rango y no entiendo porqué si incluso estoy gatillando el
evento desde una hoja activa y más aún , la activo nuevamente en la subrutina.

He aprendido muchas cosas desde aquí y leyendo además la ayuda pero como
verán no soy muy avanzado en algunas cosas y agradezco cualquier ayuda o
comentario.

No incluyo las rutinas porque son varias y largas y de hecho, repito por si
no se entendió, el código funciona bien cuando la celda editada que pertenece
al rango que estoy "vigilando" lo hago con el teclado, pero no se
"selecciona" los rangos si el cambio de valor lo hago a través de la lista de
validación con el mouse.

Muchísimas Gracias por cualquier comentario y ayuda.

Saludos,

Hugo Miguel Angel
Muchísimas Gracias por vuestra ayuda.

CSICMEL Portales y Páginas web
www.assalamo-alaikum.com
www.aquiopinoyo.cl
Respuesta Responder a este mensaje
#4 CSICMEL Portales y Páginas Web
09/11/2006 - 19:25 | Informe spam
Bueno ya tengo más información

Al utilizar una funcion propia que use indirecto es cuando sucede esto,
todavía no sé, seguramente algo debo definir para resolverlo, pero lo que
tengo es esto.

Function Nombre_Hoja(Optional Index)
If IsMissing(Index) Then Index = 0
If Index = 0 Then
Nombre_Hoja = ActiveSheet.Name
Else
Nombre_Hoja = Worksheets(Index).Name
End If
End Function

Y en las hojas tengo en alguna parte:
A B
6 =Fila()- Fila(Indirecto($E$5)) =Nombre_Hoja(A6)
7 =Fila()- Fila(Indirecto($E$5)) =Nombre_Hoja(A7)

Cuando hago depender el argumento de mi función con un indirecto en algún
nivel entonces, noto que no puedo seleccionar Rangos vía Visual Basic, en
cualquier otro caso, si se puede y esto sólo cuando uso el ratón para cambiar
un dato via una lista de validación. Si edito con teclado, todo bien.

Bueno es todo lo que he podido notar, por lo menos puedo hacer algo para
solucionar mi problema, no uzar mis funciones definidas y llenar los datos de
esas celdas via VB. Las pocas funciones que hice funcionan bien, y si no uso
referencia indirecta, todo bien. Las definí en otro módulo aparte, luego las
puse arriba de la subrutina principal. etc. pero igual.

He ido alimentado este hilo con mis avances por si alguna vez alguien
necesita o le ocurre lo mismo, sepa que buscar, en la ayuda y aquí, no había
registro de esto.


Gracias.

Muchísimas Gracias por vuestra ayuda.

CSICMEL Portales y Páginas web
www.assalamo-alaikum.com
www.aquiopinoyo.cl


"CSICMEL Portales y Páginas Web" wrote:

Hola nuevamente,

Al revisar varias hojas he notado lo siguiente:

Al colocar una fórmula usando indirecto(ref) en cualquier celda de cualquier
hoja, no se me cambia de estado la propiedad Application.ScreenUpdate de True
a False, aunque la fuerza en línea previa y con ello no selecciona rangos
dentro de la hoja activa. Es decir, cuando se cambian datos a traves de las
listas de validación, si la hoja tiene en alguna celda un formula con
indirecto, entonces, no se seleccionarán rango usando Range(String).Select,
todo lo demás se hace, cambiar valores específicos de alguna celda como
Cells(2,3).Value = nuevo valor, lo hará perfectamente, pero cuando quiero
tomar un rango para formatearle color por ejemplo u otra cosa, no lo hará.
Esto no sucede si los cambios se hacen con el teclado. No he probado en otro
PC, he revisado las opciones entre un libro y otro, pero esto es lo único que
he notado que hace la diferencia entre una situación y la otra.

En mis hojas, uso mucho el Indirecto para establecer rangos dinámicos de
cálculo a partir de un celda basica y contando filas y columnas con datos,
pero ahora veo este inconveniente; estoy usando la versión 2003 de Excel, mi
empresa la ha comprado hace tiempo ya y no creo que se cambie a otra mayor
por lo pronto, así que esto (como otras varias cosas) me sacan de contexto
con estos famosos productos Micro...

Bueno, hasta el momento nadie ha respondido, puede ser que nadie haya notado
esto, o simplemente todavía tengo algo cambiado en la configuración y no sé
que parámetro será.

Mi plantilla lo que hace es simular una base de datos, cuando escribes un
Rotulo al lado del último, con un evento change formateo esa nueva columna
con la configuración de la última. Si agregas un valor por la última fila en
la primera columna de la base de datos, copia todas las fórmulas a esa nueva
fila desde la anterior y formatea como la anterior, actualizo los rangos, más
unas referencias por nombre me ayudan después a buscar cualquier dato dentro
de ella, pueden ordenarse por cualquier columna sin romper los datos ocultos
de cálculos para los rangos de validación o referencia. Además coloqué unos
celdas tipo llave para proteger los datos o formulas y no borrarlas
accidentalmente. Todo funciona bien, excepto que cuando realizo un cambio con
lista de validación, los formateo de colores u otras cosas, tengo que
hacerlas a mano porque aunque entra en la rutina Change, no selecciona rangos.

Nuevamente, si alguien sabe qué me falta para o qué cosa no estoy
considerando, se lo agradecería.

Demás está decir que para cualquier información en la cual yo pueda ayudar,
con lo poco que sé aún, igual puedo intentar o mostrar algunos ejemplos.

Gracias.

Muchísimas Gracias por vuestra ayuda.

CSICMEL Portales y Páginas web
www.assalamo-alaikum.com
www.aquiopinoyo.cl


"CSICMEL Portales y Páginas Web" wrote:

> Hola Estimados amigos,
>
> Tengo alguna macro en las hojas de la forma
>
> Private Sub Worksheet_Change(ByVal Target As Range)
>
> Call Mi_Macro(Target, ActiveSheet.Name)
>
> End Sub
>
> En Mi Macro hago distintas cosas, según el rango editado.
>
> En general, entra a la macro y pasa por todas las subrutinas que he
> definido, pero he notado que cuando hago un cambio en la hoja a mano, es
> decir, escribo el valor y presiono Enter, los rangos del tipo:
>
> Range(Rango_a_Procesar).Select
>
> Donde Rango_a_Procesar puede tener por ejemplo= "$C$4:$C$50"
>
> Se activan y se ejecutan correctamente formateando y haciendo las cosas que
> yo espero.
>
> Pero si el cambio en la hoja (para gatillar el evento) lo realizo con el
> mouse a través del botón de lista de validación que tengo en las hojas,
> entonces, la macro se ejecuta y entra por todas las subrutinas, pero los
> rango no los "selecciona" y con ello no formatea lo que necesito. Incluso en
> las rutinas puse al comienzo:
>
> Worksheets(Nombre_de_Hoja).Activate
>
> .
> .
> .
>
> Range(Rango_a_Procesar).Select
>
> Al revisar Target, efectivamente, en ambos casos, el contenido de la celda
> editada ha cambiado, pero en el caso de haberlo hecho con el mouse y lista de
> validación, no se seleccionan los rangos dinámicos que calculo, y sí lo hace
> cuando edito la celda a mano, escribiendo y presionando Enter.
>
> Tenía entendido, que el "Worksheet_Change" notaba un cambio en la celda y se
> ejecutaba y de hecho entra y se ejecuta el código, pero no cumple las
> seleciones de rango y no entiendo porqué si incluso estoy gatillando el
> evento desde una hoja activa y más aún , la activo nuevamente en la subrutina.
>
> He aprendido muchas cosas desde aquí y leyendo además la ayuda pero como
> verán no soy muy avanzado en algunas cosas y agradezco cualquier ayuda o
> comentario.
>
> No incluyo las rutinas porque son varias y largas y de hecho, repito por si
> no se entendió, el código funciona bien cuando la celda editada que pertenece
> al rango que estoy "vigilando" lo hago con el teclado, pero no se
> "selecciona" los rangos si el cambio de valor lo hago a través de la lista de
> validación con el mouse.
>
> Muchísimas Gracias por cualquier comentario y ayuda.
>
> Saludos,
>
> Hugo Miguel Angel
> Muchísimas Gracias por vuestra ayuda.
>
> CSICMEL Portales y Páginas web
> www.assalamo-alaikum.com
> www.aquiopinoyo.cl
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida