Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DETENER MACRO ??

1,053 views
Skip to first unread message

Orfao

unread,
Apr 29, 2009, 2:50:10 PM4/29/09
to
Hola Grupo !
Como detengo la ejecucion de una macro al cambiar el valor de una celda en
particular ?
El problema es el siguiente
tengo un libro con varias hojas en las que sus datos se relacionan (las
formulas)
al ejecutar una macro que me modifica varuos valores de las diferentes hojas
estas se van recalculando y al finalizar la macro se actualiza la pantalla.
el hecho es que en alguna parte del codigo me genera un error y por lo
complicado de ese cogigo me es imposible identificar el problema. es por ello
que se me "ocurre" que deteniendo la macro justo al momento de que la celda
donde se produce el error cambie esta macro se detenga para asi poder
depurarla.
Alguna idea/sugerencia/solucion ???
Gracias..
--
Me alimento del conocimiento de todos

H�ctor Miguel

unread,
Apr 29, 2009, 4:29:17 PM4/29/09
to
hola, moises !

al ocurrir un error en tiempo de ejecucion de una macro, puedes pulsar el boton "depurar"
(a menos que tu proyecto de macros este protegido contra visualizacion si es asi, desprotegelo)
lo que te lleva a la linea que origino dicho error y desde el editor de vba puedes "ver" el valor de las variables
(simplemente posicionando el puntero "sobre" el nombre de alguna variable dentro de ese procedimiento)

saludos,
hector.

__ OP __

Orfao

unread,
Apr 29, 2009, 9:23:01 PM4/29/09
to
Hola Hector !
Estamos claros en eso...
Tal vez no me explique bien..
El problema es que en varias partes del codigo copio y pego datos a otras
hojas
y luego que he copiado esos varios datos "un looop",
al finalizar la macro (No se detiene" en realidad no es un error sino que me
coloca uno de los datos en una ubicacion (celda) no deseada" ) por eso te
digo que debo interceptar el codigo justo cuando esa celda cambie. como lo
logro ??
Gracias.

--
Me alimento del conocimiento de todos

H�ctor Miguel

unread,
Apr 29, 2009, 10:14:59 PM4/29/09
to
hola, moises !

> Estamos claros en eso...
> Tal vez no me explique bien..
> El problema es que en varias partes del codigo copio y pego datos a otras hojas
> y luego que he copiado esos varios datos "un looop", al finalizar la macro
> (No se detiene" en realidad no es un error sino que me coloca uno de los datos en una ubicacion (celda) no deseada")
> por eso te digo que debo interceptar el codigo justo cuando esa celda cambie. como lo logro ??

- una opcion es colocar un punto de inspeccion en la linea donde se realiza el avance
(haz un clic en el borde -gris- al lado izquierdo precisamente en esa linea de cdigo)
cada vez que la ejecucion alcance ese punto, se detiene, muestra la linea de inspeccion, y para continuar pulsas {F8}

- otra alternativa pudiera ser la emision de puntos con la informacion "relevante" (variable, ciclo, valores, celda, ... ???)
ya sea en la ventana de inmediato: Debug.Print (que ?), en un msgbox, en un rango de celdas, ???

- (creo que) esta ultima opcion seria mas util en caso de que tu "loop" sea de varios ciclos ({F8} en cada uno de ellos ?)

saludos,
hector.

__ previos __


>> al ocurrir un error en tiempo de ejecucion de una macro, puedes pulsar el boton "depurar"
>> (a menos que tu proyecto de macros este protegido contra visualizacion si es asi, desprotegelo)
>> lo que te lleva a la linea que origino dicho error y desde el editor de vba puedes "ver" el valor de las variables
>> (simplemente posicionando el puntero "sobre" el nombre de alguna variable dentro de ese procedimiento)
>>

Orfao

unread,
Apr 30, 2009, 7:57:01 AM4/30/09
to
Hola Hector !

la pregunta mas directa seria:
como puedo "detectar" en tiempo de ejecucion , cuando "cambie" el valor de
la celda F1 de la Hoja1
tal vez en el modulo de la hoha en el evento change ??
el probleba es que en algunas partes de las macros utilizo enableevents=false
como creo un punto de inspeccion para esa celda ?? como detengo la ejecucion
al cambiar el valor de la celda ???
Gracias..


--
Me alimento del conocimiento de todos

H�ctor Miguel

unread,
Apr 30, 2009, 3:21:41 PM4/30/09
to
hola, moises !

> la pregunta mas directa seria:
> como puedo "detectar" en tiempo de ejecucion , cuando "cambie" el valor de la celda F1 de la Hoja1
> tal vez en el modulo de la hoha en el evento change ??
> el probleba es que en algunas partes de las macros utilizo enableevents=false
> como creo un punto de inspeccion para esa celda ?? como detengo la ejecucion al cambiar el valor de la celda ???

(creo que) inhabilitar los eventos no impide los (re)calculos del modelo (a menos que tambien lo pongas en manual)
de lo que no estoy seguro es si por la "rapidez" en la ejecucion del bucle, algun cambio se quede "perdido en el limbo" (???)
por lo que te convendria (para la revision que pretendes) NO inhabilitar los eventos NI poner el modo de recalculo en manual
y... probar con la sugerencia del mensaje anterior ...
===


>> - otra alternativa pudiera ser la emision de puntos con la informacion "relevante" (variable, ciclo, valores, celda, ... ???)
>> ya sea en la ventana de inmediato: Debug.Print (que ?), en un msgbox, en un rango de celdas, ???
>>
>> - (creo que) esta ultima opcion seria mas util en caso de que tu "loop" sea de varios ciclos ({F8} en cada uno de ellos ?)

===

saludos,
hector.


Orfao

unread,
May 4, 2009, 10:36:01 PM5/4/09
to
Hola Hector !
Gracias...
Lo resolvi de la siguiente manera:
cree esta udf
y luego en una celda de la hoja donde se producia el error coloque
=cuandocambia(F!)
( F1 es la celda donde se "pegaban" los datos indebidamente , esta la borro
y luego ejecuto mis macros )
y...Listo el pollo ! pude identificar el problema ...

Function CUANDOCAMBIA(A As Range)
If A <> "" Then
Stop
End If
CUANDOCAMBIA = A
End Function

Gracias Again...
Saludos.


--
Me alimento del conocimiento de todos

H�ctor Miguel

unread,
May 4, 2009, 11:11:17 PM5/4/09
to
hola, moises !

(yo creo que) solo le diste una "aspirina" a tu (seguramente) laaaargo proceso de datos (con la udf...)
no estas determinando las causas por las que se "pegaba" (indebidamente) en la celda F1 (ademas...)
usar "Stop" es (casi) lo mismo que usar una instruccion del tipo: On Error Resume Next (?)

saludos,
hector.

__ OP __


> Lo resolvi de la siguiente manera: cree esta udf
> y luego en una celda de la hoja donde se producia el error coloque =cuandocambia(F!)

> (F1 es la celda donde se "pegaban" los datos indebidamente, esta la borro y luego ejecuto mis macros )

Orfao

unread,
May 5, 2009, 1:07:01 AM5/5/09
to
Hola Hector !!
Realmente determine la causa del problema
la macro iniciada me pasaba por entre otras a esta rutina 64 veces (cantidad
de partidas)
(un loop) y en esta justamente estaba el problem !


Private Sub SpinButton1_Change()
Dim X As Integer, F As Integer
ActiveCell.Activate
Application.EnableEvents = False
convierte
xx = Range("B7").Value ***********ESTA KINEA ESTABA COLOCADA DOS FILAS
ABAJO
If Range("bj23") Then
******************** ES DECIR AQUI
***************
VBAProject.Hoja13.Range(Range(Cells(27 + xx, 7), Cells(27 + xx,
17)).Address) = Range("BG19:BQ19").Value
End If
If Range("bj25") Then

VBAProject.Hoja1.Range("F" & xx + 1) = VBAProject.Hoja6.Range("Q8")
**************AQUI SE DETUVO LA MACRO***************************
PORQUE xx ERA IGUAL A NOTHING
VBAProject.Hoja1.Range(Range(Cells(Range("BI1"), 7), Cells(Range("BI1") +
14, 18)).Address) = Range("BI26:BT40").Value
End If
VBAProject.Hoja6.Unprotect
VBAProject.Hoja6.Range("b7") = VBAProject.Hoja6.Range("b6")
copia_db_a_apu
If Range("a25") Then Range("q8").Locked = True Else Range("q8").Locked = False
VBAProject.Hoja6.Protect
Application.EnableEvents = True
'Application.ScreenUpdating = True
End Sub


Saludos !


--
Me alimento del conocimiento de todos

0 new messages