Cordial saludo.. Necesito crear un progressbar en excel 2013 para controlar el avance de las macros

Tengo un archivo con varias macros.. Y necesito hacer el control de avence de ejecución de las macros que se están ejecutando.

1 Respuesta

Respuesta
1

H o l a:

Te envío varios ejemplos de progressbar que he implantando en diferentes archivos:

Como poner un control PROGRESSBAR en hoja excel

Para Dante - Barra de progreso

Implementar Progress Bar en macro para generar efecto visual

Barra de Progreso Excel VBA 2013

Barras de Progreso en Visual Basic

Como aplicar una ProgressBar mientras se ejecuta mi macro

El punto es que cada progressbar tiene que adecuarse a tu macro. O poner un avance por macro, es decir, si tienes 10 macros, entonces cada que termine una macro el progressbar avanzará un 10%.

En los ejemplos que te estoy enviando viene el código y la explicación de cómo adecuarlo a tu macro, si tienes dudas, entonces tendrás que enviarme tu archivo con las macros y con datos para adecuar un tipo de progressbar.

Espero que te sirva la información.

¡Gracias! 

Muchas gracias por la pronta respuesta...no conozco mucho... 

tengo esta macro.....  donde pongo el codigo de la barra de progreso?

gracias

Sub borra1()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.CutCopyMode = False

Dim Celda As Range
Dim palabra As String
Dim valida As String

Range("A1:A" & Columns("A:A").Range("A1048576").End(xlUp).Row).Select

palabra = "0x"
palabra = "*" & palabra & "*"
valida = "Information"
For Each Celda In Selection
If Celda.Value Like palabra Then
Celda.Select
ActiveCell.EntireRow.Select
ActiveCell.EntireRow.Delete

End If
Next Celda

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.CutCopyMode = False

End Sub

si tengo mas macros..las cuales llamo desde otra

Sub borra9()
Call importar
Call borra1
Call borra2
Call borra3
Call borra4
Call borra5
Call borra6
Call borra7
Call borra8


End Sub

Donde pondria la barra de progreso para verificar el avance de cada una?

gracias

H o l a:

¿Revisaste el código que te envié en los enlaces?

¡Gracias!

Si claro que lo hice,,., pero como te digo.. soy nuevo en el tema,,, oriéntame una vez.. y ya con eso aprendo...

Probé inlcuyendo .. como dices.. mi macro en uno de los ejemplos.. donde dice

***

* Macro aca

**

O algo así.. pero no me funciono..

Yo no tengo formulario ... es un archivo básico de excel.. con las macro.. que te envíe,.,.. lo máximo que hice fue poner las otras macros en módulos... y en el último modulo.. puse la que hace las llamadas a las otras...

Hasta allí llegue.

Espero tu comprensión y paciencia... agradezco tu voluntad de enseñar...

H o l a:

El userform hay que crearlo. En tu caso habría que crear un userform con 2 "progressbar" uno mostraría el número de macro que se está ejecutando y otro mostraría el progreso de la macro en ejecución.

Para adaptar el userform a tu archivo y a tus macro, envíame tu archivo con unos ejemplos y te voy ayudando paso a paso.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “carlos quintana” y el título de esta pregunta.

¡Gracias!

Hola dante.. ya lo envíe.. antes de que me escribieras .. no puse mi nombre.. pero reenvíe desde uno de los que me llegaron

Envíame tu archivo con las macros y algunos ejemplos en las hojas:

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “carlos quintana” y el título de esta pregunta.

H o l a:

Te anexo el código para el progressbar

Private Sub UserForm_Activate()
'Referencia: http://support.microsoft.com/kb/211736/es
'Mod.Por.Dante Amor
    LProgress.Width = 0
    Label1 = "Cargando Archivo ..."
    DoEvents
    principal
End Sub
'
Sub principal()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '
    ActiveSheet.Cells.Clear
    DoEvents
    ruta = "D:\REPORTES\"
    ruta = ThisWorkbook.Path & "\"
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & ruta & "desbloqueos Noviembre.txt", _
        Destination:=Range("$A$1"))
        .Name = "desbloqueos Noviembre"
        .FieldNames = True: .RowNumbers = False: .FillAdjacentFormulas = False
        .PreserveFormatting = True: .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells: .SavePassword = False
        .SaveData = True: .AdjustColumnWidth = True: .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False: .TextFilePlatform = 65001
        .TextFileStartRow = 1: .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False: .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False: .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False: .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True: .Refresh BackgroundQuery:=False
    End With
    '
    DoEvents
    Label1 = "Procesando Datos ..."
    con = 1
    rep = 10
    '
    fin = Range("A" & Rows.Count).End(xlUp).Row
    For i = fin To 1 Step -1
        If WorksheetFunction.CountA(Rows(i)) = 0 Then
            Rows(i).Delete
        ElseIf Cells(i, "A") Like "*0x*" Or _
           Cells(i, "A") Like "*The*" Or _
           Cells(i, "A") Like "*If*" Or _
           Cells(i, "A") Like "*S-1*" Then
            Rows(i).Delete
        ElseIf Cells(i, "A") <> "sosservicios" And Left(Cells(i, "A"), 3) = "SOS" Then
            Rows(i).Delete
        End If
        '
        If (con * 100) / fin >= rep Then
            UpdateProgressBar rep
            rep = rep + 10
        End If
        con = con + 1
    Next
    Application.ScreenUpdating = True
    Label1 = "Proceso Terminado"
End Sub
'
Sub UpdateProgressBar(ava)
'Por.Dante Amor
    UserForm1.Frame1.Caption = Int(ava) & " %"
    LProgress.Width = LProgress.Width + 30
    DoEvents
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas