Para Dante - Ayuda con esta Macro
Hola Dante:
¿
Podrías ayudarme con esta macro?
Lo que pasa es que grave esta macho pero es muy lenta en su ejecución y quisiera hacerla más rápida. Esta es la macro:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Dim Periodo As Integer 'Declaramos la variable
Sheets("LVIVA").Activate 'Activamos la Hoja
Periodo = txtPeriodo.Value 'Asignamos a textbox el valor de la variable
Cells(2, 21) = Periodo 'coordenadas el valor de la variable Periodo dentro de la hoja de excel activa
'Filtramos los datos
Sheets("LVI").Range("A1:S10001").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("LVIVA!LVIVACriterios"), CopyToRange:=Range("A4:S1500" _
), Unique:=False
'Ordenamos los datos primero por numero de documento, fecha y numero de control
Range("A4").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("LVIVA").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("LVIVA").Sort.SortFields.Add Key:=Range("E5:E1500"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("LVIVA").Sort.SortFields.Add Key:=Range("C5:C1500"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("LVIVA").Sort.SortFields.Add Key:=Range("D5:D1500"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("LVIVA").Sort
.SetRange Range("A4:S1500")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Númeramos las filas y copiamos el archivo a la hoja LVTXT
Range("B5").Select
ActiveCell.FormulaR1C1 = "1"
Range("B6").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]=3,R[-1]C+1,"""")"
Range("B6").Select
Selection.Copy
Range("A6").Select
Selection.End(xlDown).Select
Range("B1500").Select
Range(Selection, Selection.End(xlUp)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("LVTXT").Select
Cells.Select
Selection.ClearContents
Sheets("LVIVA").Select
Range("A5").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("LVTXT").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Columns("R:S").Select
Range("S1").Activate
Selection.ClearContents
ActiveWorkbook.Save
'Configuramos 17 columnas en el listbox1
ListBox1.ColumnCount = 17
ListBox1.TextAlign = fmTextAlignRight
ListBox1.ColumnHeads = False
ListBox1.ColumnWidths = "25;15;60;40;60;20;60;160;60;60;60;60;60;60;60;60;60"
'Llenamos la lista
ListBox1.RowSource = "LVTXT!A1:Q" & Sheets("LVTXT").Range("A" & Rows.Count).End(xlUp).Row
'Configuramos 8 columnas en el listbox2 PARA LOS TOTALES
ListBox2.ColumnCount = 8
ListBox2.TextAlign = fmTextAlignRight
ListBox2.ColumnHeads = False
ListBox2.ColumnWidths = "60;60;60;60;60;60;60;60"
'Llenamos la lista
ListBox2.RowSource = "LVIVA!Z2:AG" & Sheets("LVIVA").Range("Z" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.CutCopyMode = False
End Sub
Lo que hace: primero aciva la Hoja LVIVA luego hace un filtro avanzado después ordena los datos filtrados por numero de documento, fecha y numero de control luego en la Columna Nº numero los registro filtrados ( es decir si el filtro arroja 14 filas se numera de 1 a 14).
Gracias por tu ayuda