Como detener la ejecución de un código

Hola experto, quisiera me pudieras orientar en que poner al siguiente código para que detuviera su ejecición cuando termina de realizar el acomodo de datos. Te muestro mi código:
Dim celdaINI, celdaFIN, valor, valor1 As String
Range("A1").Select
Do While ActiveCell.Value <> "$A$65536"
Do While ActiveCell.Value <> "N"
ActiveCell.Offset(1, 0).Select
Loop
If ActiveCell.Value = "N" Then
celdaINI = ActiveCell.Address
valor = ActiveCell.Offset(0, 0).Address
valor1 = ActiveCell.Offset(0, 1).Address
ActiveCell.Offset(1, 0).Select
End If
Do While ActiveCell.Value <> "N"
ActiveCell.Offset(1, 0).Select
Loop
If ActiveCell.Value = "N" Then
celdaFIN = ActiveCell.Offset(-1, 5).Address
Celda = ActiveCell.Offset(-1, 0).Address
Range(celdaINI, celdaFIN).Select
Selection.Sort Key1:=Range(valor), Order1:=xlDescending, Key2:=Range(valor1) _
        , Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
End If
Range(Celda).Select
Loop
ActiveCell.End(xlUp).Select
Como podrás ver es un código que me ordena datos por conjunto de datos, el problema es que cuando llega al último conjunto de datos, como no encuentra la letra "N", pues se traba y no se detiene por si solo, lo tengo que detener manualmente. Que me recomendarías insertarle para que funcione adecuadamente, el acomodo de datos lo hace muy bien, solo es ponerle un tipo freno o algo para que al llegar al ultimo conjunto de datos no se trabe.
Espero me puedas ayudar.
Saludos

2 respuestas

Respuesta
¿Bueno estoy mirando la macro y pues veo que siempre te va a hacer un ciclo y lo que busca es que haya un valor N en el rango donde esta verdad? Entonces lo mejor es que remuevas el Loop primero y coloques ese do while con otra restricción por ejemplo que la celda sea la celda. Address 65536 o algo de ese estilo.
En el segundo do while preguntas que haga el método hasta que exista una N y luego vuelves a preguntarle si hay una N y pues para que si se sabe que si la hay.? Eso sobra. asi mismo en el siguiente do while.
emplea un if mas bien si existe un else es decir:
i=true
Do while i=false
if activecell.value <> "N" then
Codigo si lo encontro
i = true 'esto para que detenga el loop
Else
Activecell.Offset(0,1).select
end if
loop
Esa es una forma más adecuada de usar un ciclo para evitar caer en códigos redundantes y ausentes de fin.
Recuerda visitar www.ayconcol.com son expertos en el tema ellos también responden de forma gratuita directamente en la web o por todoexpertos en un pequeño espacio een la página principal, si quieres aprender más puedes meterte en www.ayconcol.com/foro creas usuario y todo y listo! Si quieres ellos también elaboran aplicativos a un costo muy bajo!
Si, la macro lo que busca son conjuntos de datos separados por la letra "N", entre la "N" inicial y la siguiente "N", crea un bloque de datos y esos los ordena, pero al final de los registros no tengo otra "N" y hace que se siga de filo la ejecución de la macro y al final se trabe, introduje el código que me enviaste pero no funcionó, la macro se siguió de filo, y con este código ni siquiera acomodo los datos en orden, no les hizo nada.
¿Cómo podré resolverlo?
Saludos!
Gracias!
Pero si son separados entonces no te debe funcionar adecuadamente... es probable que te genere fallas dadoq ue busca una N mayúscula... ademas no te los ordena el solamente te los busca...
¿Qué otra opción podremos usar? ¿De qué tipo son los datos? Dame más información haber que podemos solucionar
Ok te explico, tengo registros de datos los cuales están todos en desorden, la "N" para mi es el encabezado entre cada conjunto de datos, entonces mi archivo empieza con una "N", después tengo datos, y después tengo otra "N" que divide ese conjunto de datos, lo que hago actualmente con mi macro es eso, acomodar los datos en forma descendente cada grupo de datos separados por "N", no se si así me haya dado a entender.
Ahora bien, mi código funciona hasta cierto punto, me acomoda en forma descendete por conjunto de datos, pero no se detiene el código y genera error, pero si tu tienes una mejor idea para hacer esto pues adelante.
Saludos!
He estado intentando pero no he dado con el chiste... me rindo, si quieres intenta con www.ayconcol.com ellos muy seguramente si den con el tema.
Lo siento :(
Respuesta
-1
Si sabes de antemano el número de datos cambia los "do while" por "for", así le pondrás el límite tú.
Si no los sabes y no tienes casillas en blanco entre los datos puedes incorporar una condición tipo 'if activecell.value ="" then exit do'.
Si no te vale lo que te comento explícame más como tienes los datos introducidos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas