Saltar al contenido

Correcto cierre de un ciclo en la macro


segalo

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

Enlace a comentario
Compartir con otras webs

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.
 

 

 

 

Enlace a comentario
Compartir con otras webs

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 

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

 

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 

 

 

 

Enlace a comentario
Compartir con otras webs

 

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 

 

 

 

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

Archivado

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

  • 95 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Gracias @Victor7. La solución que me das no es valida para mi proyecto ya que la idea es que en la pestaña DATAGlobal se vayan añadiendo registros, por lo que la formulas deben ser dinámicas en el sentido que según vaya añadiendo registros, se vayan completando el cuadro con los valores únicos.    Por otro lado, no puedo prescindir de la pestaña de valores únicos por que con esa información realizo otro tipo de informes con unidades totales, graficas con las fechas etc.. Muchas gracias por la ayuda
    • Abre el adjunto y pulsa el botón  GENERAR HOJAS y luego pulsa sobre cualquier fecha del calendario para ir a la hoja deseada. Observa que he añadido 2 botones en la hoja CALENDARIO, uno para generar las hojas y otro para eliminarlas. También he añadido una flechita azul en las hojas generadas para volver a la hoja CALENDARIO. Estas son las macros: En la hoja CALENDARIO: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim d As Integer, m As Integer, a As Integer On Error Resume Next If IsNumeric(Target) Then If Not Target = "" Then x = Int((Target.Row - 6) / 9) y = Int((Target.Column - 5) / 8) + 1 m = x * 6 + y d = Target a = Right([E3], 4) Sheets(Format(d, "00") & "-" & Format(m, "00") & "-" & a).Activate End If End If End Sub En el Módulo1: Sub GenerarHojas() Application.ScreenUpdating = False Application.CopyObjectsWithCells = True Dim a As Integer a = Right([E3], 4) With Sheets("ORIGI") For fecha = CDate("01/01/" & a) To CDate("31/12/" & a) '<-- Periodo a generar .Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = Format(fecha, "dd-mm-yyyy") [B4] = [B4] & " " & fecha Next End With Volver End Sub '-- Sub EliminarHojas(): On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False Dim a As Integer a = Right([E3], 4) For fecha = CDate("01/01/" & a) To CDate("31/12/" & a) '<-- Periodo a eliminar Sheets(Format(fecha, "dd-mm-yyyy")).Delete Next End Sub '-- Sub Volver() Sheets("CALENDARIO").Activate End Sub   Libro1 (15).xlsm
    • Hola un cordial saludo a todos.  Tengo una hoja con un formato de calendario y tengo 365 hojas cada una con nombre de un dia mes y año  en especifico agradecería me ayuden a como puedo realizar la vinculacion de cada dia del calendario con cada hoja respectivamente sin hacerlo de forma manual , ya que es muy laborioso dado que lo tengo que hacer de una por una.   adjunto coloco un ejemplo de lo que tengo gracias. Libro1.xlsm
    • Muchas gracias @Israel Cassales. La hoja es un ejemplo de como seria la hoja definitiva. ( Por desgracia no puedo poner la información real). Los datos los saco de un registro automático por donde pasan unidades con un numero de referencia único para cada producto. Estas unidades pasan por unos puntos de control y en el registro automático se graban duplicando el numero de producto e indicando el registro del nuevo punto de control. Se que parece un poco lío explicado por aqui. Probaré la solución de @Victor7 y comentaré por aquí los progresos. Muchas gracias   
    • Pregunta para @jose_alk ¿El diseño en la hoja DATAGlobal es tuyo? Si la respuesta es sí, entonces toma mayor relevancia la propuesta del maestro @Victor7 porque si mira con atención cada que avanza un paso, vuelve a escribir el paso anterior, así hasta completar los tres pasos. Por esta causa la fórmula del maestro vincula solo la última parte de ese rango ya que de continuar con esa tendencia y repetir los ciclos, al final siempre le quedarán los únicos que busca. En ese caso podría omitir la otra hoja Data Valores Unicos, porque desde la primer hoja DATAGlobal si filtra en el tercer paso y quita las vacías le quedarán solo los ciclos completos. Por otro lado, si los registros no estarán siempre tan bien ordenados el escenario cambia, por lo tanto le reitero la pregunta inicial, porque si es suyo el diseño tal vez le conviene reconsiderar su formato y que los pasos estén entre lineas. Eso le dará un mayor control de los datos, los filtros y las funciones. Saludos totales.    
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.