Saltar al contenido

Correcto cierre de un ciclo en la macro


segalo

Recommended Posts

publicado

Buen dia 

Recuerro a ustedes papar poder validar el correcto cierre del ciclo de esta macro.

El ciclo afectado es el FOR que tiene la variable n debe trabajar hasta el 23, pero cuando llega a 24, sigue con el ciclo de numero1 y de suma y continua trabajando con errores.

como puedo hacer para que la n al llegar a 24 finalice la macro y no realice las demas actividades  ? ya movi los Next pero no lo he logrado, espero me puedan dar una guia 

Gracias 

 

esta es la macro

 

Sub Union()
'
Dim fila, RR As Long

Dim n&, cCriterio$, H&, g&, y&

   fila = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

    j = 5
   y = 1
    
  For H = 5 To 23
    
    Dim aCol, t&, LE$
    aCol = Array("E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y")
    For t = LBound(aCol) To UBound(aCol)
    LE = aCol(t)
    

For n = j To 23
        If n = j Then cCriterio = "<>0" Else cCriterio = "0"
        ActiveSheet.Range("$A$11:$AH$" & fila).AutoFilter Field:=n, Criteria1:=cCriterio
   
           ' numero1
    Range("A12").Select
    ActiveCell.FormulaR1C1 = y
    Range("B12").Select
    Selection.End(xlDown).Select
    Range("A" & fila).Select
    ActiveCell.FormulaR1C1 = y
    Range("A" & fila).Select
    Selection.Copy
    Range(Selection, Selection.End(xlUp)).Select
    Selection.Resize(Selection.Rows.Count + 1).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.End(xlUp).Select
    ActiveWindow.SmallScroll Down:=-24
    
    RR = fila - 11
    
    'MsgBox RR
    
     'suma
        Range(LE & 10).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(LE & 11).Select
    Selection.End(xlDown).Select
    Range(LE & fila).Select
    Application.CutCopyMode = False
   ActiveCell.Formula = "=SUBTOTAL(9," & LE & "12:" & LE & Selection.Row - 1 & ")"
    Range(LE & fila).Select
    Selection.Copy
    Selection.End(xlUp).Select
    Range(LE & 9).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
         
           Next n


    j = j + 1
    n = j
    y = y + 1

    Rows("11:11").Select
    ActiveSheet.ShowAllData
    Range("A10").Select
        
            Next t
          Next H

End Sub

 

 

Gracias 

Ciclo.xlsm

publicado

Hola,

Gastando mis últimos 20 centavos...

No entiendo lo que quieres hacer con la macro, a lo mejor tienes código innecesario, con esos datos en otra hoja pon como quieres que sea el resultado a mano... Ya que tu macro esta hecha camotes...

Por ejemplo tienes este código:

    For H = 5 To 23
        aCol = Array("E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y")
        For t = LBound(aCol) To UBound(aCol)
            LE = aCol(t)
            'MsgBox LE
            For n = j To 23
                If n = j Then cCriterio = "<>0" Else cCriterio = "0"
                ActiveSheet.Range("$A$11:$AH$" & fila).AutoFilter Field:=n, Criteria1:=cCriterio
            Next n

    

Lo que puse en negritas cambia el FILTRO de 5 a 23 veces y no hace nada ese código en concreto....

Etc, etc, etc, con el demás código.

y una buena explicación en la nueva hoja resuelta a mano....

Saludos.

P.D.: APROVECHA ANTES DE GASTAR ESOS 20 CENTAVOS.
 

 

 

 

publicado

Gracias Leopoldo 

El tema del ciclo de n hasta 23 es el centro de la macro, lo que realiza es filtrar los valores de la columna de la letra LE con los valores diferentes a cero y las demas en cero, y asi en cada ciclo ya corriendo a la derecha y debe numerar en la columna A en que ciclo queda cada linea y saca la sumatoria al final, si eejcutas la macro vas a ver el resultado en la columna A y  en la fila 9 

 

Gracias 

publicado

Hola,

No puedo seguir tu código... A lo mejor en tu cabecita esta claro, pero para mi no.

Hace 14 horas, Leopoldo Blancas dijo:

For n = j To 23
                If n = j Then cCriterio = "<>0" Else cCriterio = "0"
                ActiveSheet.Range("$A$11:$AH$" & fila).AutoFilter Field:=n, Criteria1:=cCriterio
            Next n

Si te fijas en este código al final siempre va a quedar filtrado por la columna 23, y no me queda claro el propósito de ello.

Y no se como salen las cantidades de la fila 9...

Si podrías explicarlo paso por paso lo que haces o quieres hacer? Seria de gran ayuda, para gastar estos últimos 20 centavos que me quedan...

NOTA: DONDE DA ERROR LA MACRO SUSTITÚYELO POR:

If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData

 

Saludos

publicado

 

Exacto Leopoldo 

al final cuando realiza la 23 realiza su proceso ok, pero cuando cambia a 24 ya no cambia de columna y continua con el bloque de numero1 y la suma, ese es el error.

el error lo da, al momento que como no tiene filtro, le pido que desactive los filtros y saca el error.

yo que requiero es que cuando haga el ciclo del 23 finalize la macro, ya no haga nada mas, como podria hacer eso ? 

 

 

Gracias 

 

 

 

publicado

 

Lo siento, por no darme a entender, si ejecutan la macro veran que fianliza en error, ya que cuando la variable n llega a 24, continua con tareas, yo requiero que nunca llegue a 24 o bueno que esas tareas no se ejecuten adicionales, y termine en error

 

o me podrian preguntar que parte excta no entienden 

 

Gracias 

 

 

 

publicado

Hola segalo

En 14/12/2019 at 20:15 , segalo dijo:

Buen dia 

Recuerro a ustedes papar poder validar el correcto cierre del ciclo de esta macro.

El ciclo afectado es el FOR que tiene la variable n debe trabajar hasta el 23, pero cuando llega a 24, sigue con el ciclo de numero1 y de suma y continua trabajando con errores.

como puedo hacer para que la n al llegar a 24 finalice la macro y no realice las demas actividades  ? ya movi los Next pero no lo he logrado, espero me puedan dar una guia 

Gracias 

Para entenderte mucho mejor, en una segunda hoja, plasma los resultados [manualmente], pero explica en la HOJA, de donde viene cada resultado y el porque, de esta forma se entenderá realmente que es lo que deseas hacer, porque lo que yo logro interpretar, es que quieres ir filtrando cada columna e ir sumando esos valores, pero no me queda claro donde se debe poner ese resultado

 

Saludos

publicado
En 14/12/2019 at 21:15 , segalo dijo:

Buen dia 

Recuerro a ustedes papar poder validar el correcto cierre del ciclo de esta macro.

El ciclo afectado es el FOR que tiene la variable n debe trabajar hasta el 23, pero cuando llega a 24, sigue con el ciclo de numero1 y de suma y continua trabajando con errores.

como puedo hacer para que la n al llegar a 24 finalice la macro y no realice las demas actividades  ? ya movi los Next pero no lo he logrado, espero me puedan dar una guia 

Gracias 

 

esta es la macro

 

Sub Union()
'
Dim fila, RR As Long

Dim n&, cCriterio$, H&, g&, y&

   fila = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

    j = 5
   y = 1
    
  For H = 5 To 23
    
    Dim aCol, t&, LE$
    aCol = Array("E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y")
    For t = LBound(aCol) To UBound(aCol)
    LE = aCol(t)
    

For n = j To 23
        If n = j Then cCriterio = "<>0" Else cCriterio = "0"
        ActiveSheet.Range("$A$11:$AH$" & fila).AutoFilter Field:=n, Criteria1:=cCriterio
   
           ' numero1
    Range("A12").Select
    ActiveCell.FormulaR1C1 = y
    Range("B12").Select
    Selection.End(xlDown).Select
    Range("A" & fila).Select
    ActiveCell.FormulaR1C1 = y
    Range("A" & fila).Select
    Selection.Copy
    Range(Selection, Selection.End(xlUp)).Select
    Selection.Resize(Selection.Rows.Count + 1).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.End(xlUp).Select
    ActiveWindow.SmallScroll Down:=-24
    
    RR = fila - 11
    
    'MsgBox RR
    
     'suma
        Range(LE & 10).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(LE & 11).Select
    Selection.End(xlDown).Select
    Range(LE & fila).Select
    Application.CutCopyMode = False
   ActiveCell.Formula = "=SUBTOTAL(9," & LE & "12:" & LE & Selection.Row - 1 & ")"
    Range(LE & fila).Select
    Selection.Copy
    Selection.End(xlUp).Select
    Range(LE & 9).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
         
           Next n


    j = j + 1
    n = j
    y = y + 1

    Rows("11:11").Select
    ActiveSheet.ShowAllData
    Range("A10").Select
        
            Next t
          Next H

End Sub

 

 

Gracias 

Ciclo.xlsm 22 kB · 2 descargas

Aquí tienes una opciónCiclo.xlsm

publicado

Saludos @segalo, te dejo el archivo con tres opciones.

1.- La primera es la macro tuya, que le coloque un opción para que NO te de el error.

2.- La segunda, en esencia hace lo mismo, solo que optimizado, y otra cosa, en la columna A colocas el numero del filtro a la que pertenece esa fila cierto?, si es asi (y que fue lo que entendi de tu macro), aqui esta bien, pero tu macro la coloca mal, revisa

3.- y una opcion sin usar el filtro automático

 

suerte

Ciclo.xlsm

publicado
En 16/12/2019 at 11:54 , Antoni dijo:

Este foro se ha quedado embuclado en el día de la marmota???

Vaya! No sé con precisión el día pero voy anotando en el calendario....

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.