Jump to content

Correcto cierre de un ciclo en la macro


Recommended Posts

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

Link to comment
Share on other sites

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.
 

 

 

 

Link to comment
Share on other sites

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 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

 

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 

 

 

 

Link to comment
Share on other sites

 

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 

 

 

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy