Excel - help!!

 
Vista:

help!!

Publicado por jorge (67 intervenciones) el 14/03/2007 20:56:32
hola, necesito ayuda

me pasa una cosa muy rara con una macro, y explicarlo aquí es un poco complicado y muy largo, necesito un experto que esté dispuesto a recoger por mail mi fichero y echarle un vistazo al mi.
le he dado mil vueltas ya y no hay manera, que alguien me eche un cable...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:help!!

Publicado por jorge (67 intervenciones) el 14/03/2007 21:46:26
te acabo de enviar un mail, gracias por tú interés, ruego me mantengas informado.

un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:help!!

Publicado por jorge (67 intervenciones) el 14/03/2007 21:58:37
la última prueba que he hecho ha sido programar las secuencias de órdenes en macros, y dejar el evento sin programación como sigue, pero el efecto es el mismo, parálisis total

Private Sub Worksheet_Change(ByVal Target As Range)
If ((Target.Row - 6) Mod 9 = 0) And (Target.Column <= 4) Then
Range("G" & Target.Row - 2).Select
Application.Run "PERSONAL.XLS!Macro2"
Target.Select
ElseIf ((Target.Row - 4) Mod 9 = 0) And ((Target.Column - 7) Mod 3 = 0) And ((Target.Column - 7) / 3 >= 0) Then
Target.Select
Application.Run "PERSONAL.XLS!Macro3"
End If
End Sub

para jose luis: si lees esto me vas a decir que tengo que programar esas órdenes que me dijiste la semana pasada, pero ya está hecho, la primera instrucción que realizan las macros es Application.EnableEvents = False y la última Application.EnableEvents = True, por lo que entiendo que el problema que tenía antes ya lo solucioné (vaaaale, con tu ayuda)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:help!!

Publicado por José Luis (700 intervenciones) el 15/03/2007 02:21:29
Sólo en caso que Haver no pueda ayudarte, pásame el fichero.
Pregunta tonta ¿este evento que ejecutas está en Personal.xls?
¿usas los puntos de interrupción para hacer un seguimiento de la ejecución de la macro?
¿Has probado a poner aquí en la entrada el Application.EnableEvents = False?

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:help!!

Publicado por jorge (67 intervenciones) el 15/03/2007 20:11:20
ayer estuve peleandome con haver y con vba, y descubrimos un fallo, pero no lo he conseguido solucionar, sólo chapucearlo para que desaparezca, en mi opinión el código es correcto (evidentemente no). pero ni aún haciendo desaparecer ese fallo, consigo hacer funcionar el programa porque hay algún otro error claro está.

el evento no está en personal.xls, está en una hoja de cálculo que yo he creado.

si, uso los puntos de interrupción, y el mayor problema que tengo es que no me salta ningún error, simplemente se deja de ejecutar el código, y para más inri, tengo el evento change programado en dos vertientes, de forma que si se produce un cambio de edición en una celda se ejecutará una secuencia, y si el cambio es en otra se ejecutará otra secuencia, pero ambas secuencias se parecen bastante, hasta el punto de que las dos llaman al sub procedimiento que me da problemas, y en un camino funciona correctamente y en el otro no, porsupuesto utilizando la misma lógica, situandome en la misma celda después de haber activado el evento change y tal.

no entiendo que quieres decir con aquí en la entrada, el application.enableevents = false lo hago nada más iniciar el evento change para evitar que se reactive, pero ayer haver me dijo que era posible que al inhabilitar los eventos no saltara el mensaje de error, porque yo mismo lo estaba capando, y por consiguiente quité todas las líneas aplication.enableevents, pero el resultado es el mismo, la misma interrupción, en la misma línea.

en concreto este es el código completo del sub que me da problemas, y la línea a partir de la cual se interrumpe el proceso es activecell.value = modelo, es decir la primera, pero esta línea no es imprescindible para el "camino" de evento change que me ocupa, por lo que la puedo eliminar tranquilamente, pues bien, si lo hago pongo un punto de interrupción en la siguiente línea, y ocurre exactamente lo mismo, NADA

Private Sub calcula_controladores_minimos(modelo As String) ActiveCell.Value = modelo
ActiveCell.Offset(0, -1).Value = 1
While 4 * ActiveCell.Offset(0, -1).Value < ActiveCell.Offset(5, -1).Value
ActiveCell.Offset(0, -1).Value = ActiveCell.Offset(0, -1).Value + 1
Wend
End Sub

con esto entiendo que hasta aquí las instrucciones en cuanto a condiciones para escoger un "camino" u otro son correctas, puesto que he llegado donde pretendía llegar porque motivo no ejecutar una instrucción tan sencilla como asignar un valor a una celda???? me tiene totalmente desconcertado.

cuando ejecuto paso a paso, veo que modelo corresponde con la cadena de texto correcta, ActiveCell.Offset(0, -1).Value tiene un valor numérico entero positivo adecuado (aunque en realidad me da igual puesto que ese valor lo voy a machacar) y ActiveCell.Offset(5, -1).Value tiene el valor vacio, siendo que en la hoja de excel hay un valor numérico entero positivo provinente de una fórmula de excel (este es el fallito del que hablaba) para "chapucear" este fallo y que en la ejecución paso a paso ActiveCell.Offset(5, -1).Value tenga un valor numérico lo consigo machacando la fórmula de la hoja de cálculo de excel y tecleando 1 (por ejemplo). una vez hecho esto, al volver a la ejecución paso a paso ActiveCell.Offset(5, -1).Value ya tiene el valor 1, sin embargo el programa sigue sin funcionar como debería.

estoy pensando probar el mismo código en otro pc por si fuera el mío que está mal... (ójala fuera esto, pero lo dudo muy mucho)

Supongo que ahora mismo habrás perdido 5 minutos de tu tiempo puesto que no habrás entendido nada, pero consuelate porque yo llevo muchas horas ya perdidas con esta kk

Gracias por vuestro interés, un saludo desde Valencia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:help!!

Publicado por José Luis (700 intervenciones) el 16/03/2007 00:00:12
Hola Jorge, intentaré ayudarte en lo que pueda pero voy a estar out unos días.
Es casi seguro que Abraham puede ayudarte.

Cuando usas eventos para hacer macros, es conveniente que deshabilites los eventos para evitar llamadas recursivas, a menos que necesites eso en la macro que realices.
Para tu caso, el evento Change ocurre cuando se cambia el contenido de una celda y según la celda que sea llamas a uno u otro procedimiento. Pues bien, si alguno de esos procedimientos modifica otra celda ocurrirá que -si no has deshabilitado los eventos- se disparará de nuevo el evento Change e impedirá que se ejecute el resto del código.
Lo normal es que deshabilites los eventos al entrar en el código del Change y depués al salir, los habilites de nuevo. El "truco" consiste en tener controlado el procedimiento de rehabilitación de eventos del tal forma que al desviar el proceso del programa a otra macro, ocurra lo que ocurra siempre se restablezca la captura de eventos. Para ello tienes el ON ERROR GOTO de forma que si ocurre un error puedas saltar a un código de tratamiento de errores -lo que sea- y rehabilitar los eventos.Y siempre, al salir, vuelves a rehabilitar los eventos.

Respecto al código que estás usando, no soy partidario de usar el Offset porque al final puedes perder el control y prefiero identificar la dirección de la celda activa y moverme a partir de ahí. El caso es que mi pregunta es la siguiente ¿estás seguro de que la celda activa cuando llegas al

While 4 * ActiveCell.Offset(0, -1).Value < ActiveCell.Offset(5, -1).Value

es la misma que con la que entraste?

¿No se produce un desplazamiento de la celda activa al hacer

ActiveCell.Offset(0, -1).Value = 1

y después otros

ActiveCell.Offset(0, -1).Value = ActiveCell.Offset(0, -1).Value + 1 ?

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:help!!

Publicado por jorge (2 intervenciones) el 16/03/2007 17:59:48
según mi corta experiencia no hay un desplazamiento con esta instrucción ActiveCell.Offset(0, -1).Value, puesto que me limito a leer o modificar el valor de la celda, pero en ningún caso la selecciono (ActiveCell.Offset(0, -1).select)

Muy de acuerdo con eso de que puedo llegar a perder el control, y por supuesto me ha pasado ya alguna vez, pero si lo pierdo es porque he escrito algo mal, reviso el código, reparo y listo. por otra parte para evitar este tipo de situaciones trato de desplazarme lo mínimo posible por la hoja de cálculo desde las macros, lo que quiero decir con lo mínimo posible es que trato de no desplazarme, (.select), sino simplemente leer y actuar (.value) por lo que la celda seleccionada puede no variar, pero sí hacerlo el valor de las celdas que me interese.

Estoy completamente seguro de dónde estoy ubicado en la hoja de cálculo, en primer lugar porque si la celda seleccionada si pongo puntos de interrupción es la que deseo seleccionar, y en segundo lugar, porque si me encuentro algún error como ese último que comenté cuando cambio el valor de la celda que considero que está provocando ese defecto, y vuelvo a ejecutar el código, el fallo desaparece.

no te preocupes que yo también voy a estar off line unos dias, estamos en fallas en mi city y no creo que tenga mucho tiempo para perder dándome cabezazos contra una pared.

Saludos Jorge.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar