Esta es la macro de la barra:
Sub principal()
'Por.DAM
Application.ScreenUpdating = False
ini = 9
Fin = 3900
con = 0
rep = 1
For Each R In Range("B" & ini & ":B" & Fin)
If R = "" Then R.EntireRow.Hidden = True
avance = con / (Fin - ini)
If Int(avance * 10) = rep Then
UpdateProgressBar avance
rep = rep + 1
End If
con = con + 1
Next R
'Unload UserForm1
End Sub
Lo que hace es un ciclo de la fila 9 y terminar en la fila 3900 (todo esto es un ejemplo).
La macro lleva un contador en la variable "con", por cada registro que se lee, con se incrementa en 1, cuando el contador llega a 10, entonces se ejecuta la macro UpdateProgressBar y lo que hace es incrementar el tamaño de un Label dentro del userform.
A eso me refiero con procesar registro por registro.
Tu macro tiene esto:
- Columns("A:E").Select
Selection. Copy
otro paso:
- ActiveWorkbook. Worksheets. Add
otro paso:
- Columns("A:A").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Este paso es el que más se tarda:
- Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(3), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Lo que tienes en tu macro son procesos, se tendría que adaptar la barra, para ejecutar la macro UpdateProgressBar, entre cada paso.
Quedaría así por ejemplo:
Private Sub UserForm_Activate()
'Referencia: http://support.microsoft.com/kb/211736/es
'Mod.Por.DAM
UserForm1.LProgress.Width = 0
principal
End Sub
Sub principal()
'Por.DAM
Application.ScreenUpdating = False
Dim UltimaFilC As Long
Sheets("Base de datos").Select
Columns("A:E").Select
Selection. Copy
ActiveWorkbook. Worksheets. Add
'
UpdateProgressBar 0.1
'
ActiveSheet.Name = "recalculo"
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("A:A").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Range("A1").Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlYes
Range("A:C").Select
'
UpdateProgressBar 0.2
'
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(3), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Columns("A:C").Select
'
UpdateProgressBar 0.5
'
Sheets("Exhibiciones").Select
Columns("A:C").Select
Selection.Delete Shift:=xlToLeft
Sheets("recalculo").Select
Selection.Copy
Sheets("Exhibiciones").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'
UpdateProgressBar 0.8
'
Application.CutCopyMode = False
Range("a1").Select
Range("A1").Sort Key1:=Range("b2"), Order1:=xlAscending, Header:=xlYes
UltimaFilaB = Cells(Rows.Count, "B").End(xlUp).Row
Range("a2:C" & UltimaFilaB).Select
Selection.Delete Shift:=xlUp
Range("A1").Select
'Por.Dante Amor
'Do While ActiveCell <> Empty
'ActiveCell.Offset(1, 0).Select
'Loop
Selection.End(xlDown).Offset(1, 0).Select
'Por.Dante Amor
'
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Delete Shift:=xlUp
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 9), Array(6, 1)), TrailingMinusNumbers:=True
Range("A1").Select
ActiveCell.FormulaR1C1 = "Codigo"
Range("B2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],recalculo!C[-1]:C,2,0)"
UltimaFilC = Cells(Rows.Count, "A").End(xlUp).Row
Range("b2:b" & UltimaFilC).FillDown
Columns("B:B").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'
UpdateProgressBar 0.9
'
Application.CutCopyMode = False
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
Sheets("recalculo").Select
Application.DisplayAlerts = False
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.Delete
Sheets("Base de datos").Select
Range("a1").Select
'
UpdateProgressBar 1
'
Application.StatusBar = False
End Sub
Sub UpdateProgressBar(ava)
'Por.DAM
UserForm1.FProgress.Caption = Format(ava, "0%")
UserForm1.LProgress.Width = ava * (UserForm1.FProgress.Width - 10)
DoEvents
End Sub
Saludos.Dante Amor (Dam)