Страницы: 1
RSS
Соответствие StatusBar с макросом
 
Здравствуйте, форумчане. Прошу помощи в следующем:  
При выполнении определенного макроса (например Макрос2) использую StatusBar:  
Sub Макрос ()  
For i = 1 To 10000  
p = i \ 100  
Application.StatusBar = "выполнена:" & p & "%" & String (p \ 10 + 1, ChrW (8700))  
DoEvents  
Next  
Application.StatusBar = False  
End Sub  
Подскажите пожалуйста где мне вставить мой основной макрос, чтобы StatusBar отражал реальную ситуацию при выполнении макроса. Спасибо.
 
Вам на форум телепатов надо, а не сюда.  
 
Мы ваш макрос не видели (может, он вообще из одной строки состоит) - как мы вам подскажем?
 
Извиняюсь.....  
 
Sub Макрос()  
 
 
FileCopy "Z:\PA_command_recep_par_CM_New.xls", "O:\Звіти 2012\Звіт тижневий основний\PA_command_recep_par_CM_New.xls"  
       IName = Звіт  
 
   iFullName = "O:\ЗВІТИ 2012\Звіт тижневий основний\PA_command_recep_par_CM_New.xls" & IName  
 
   With Application  
 
       .EnableEvents = False  
 
       .Workbooks.Open Filename:=iFullName  
 
       .EnableEvents = True  
       End With  
   Windows("PA_command_recep_par_CM_New.xls").Activate  
   Range("A2:B2").Select  
   With Columns("B:D")  
   .ColumnWidth = 10.05  
   .UnMerge  
   .ColumnWidth = 10.05  
   End With  
   Columns("B:B").Select  
   Selection.Delete Shift:=xlToLeft  
   Columns("E:F").Select  
   Selection.Delete Shift:=xlToLeft  
   Columns("G:G").Select  
   Selection.Delete Shift:=xlToLeft  
   Columns("I:I").Select  
   Selection.Delete Shift:=xlToLeft  
   Range("A2").Select  
   Range("A3:L3").Select  
   Selection.AutoFilter  
   Selection.AutoFilter Field:=1, Criteria1:="17"  
   Rows("4:3000").Select  
    Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="90"  
   Rows("4:3000").Select  
    Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="16"  
   Rows("4:3000").Select  
    Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="15"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="14"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="13"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="12"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="11"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="10"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="9"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="8"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="7"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="5"  
   Rows("4:3000").Select  
    Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1, Criteria1:="6"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=1  
    Selection.AutoFilter Field:=2, Criteria1:="217"  
   Rows("4:3000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=2  
   Selection.AutoFilter Field:=1  
   Selection.AutoFilter Field:=3, Criteria1:="9001"  
   Rows("4:2000").Select  
   Selection.Delete Shift:=xlUp  
   Selection.AutoFilter Field:=3  
   Columns("F:H").Select  
   Selection.FormatConditions.Delete  
   Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _  
       Formula1:="=""null"""  
   With Selection.FormatConditions(1).Font  
       .Bold = True  
       .Italic = False  
   End With  
   Dim a  
   On Error Resume Next  
   a = [g3:h3000].Value
   For i = 1 To UBound(a)  
       For j = 1 To UBound(a, 2)  
           a(i, j) = DateSerial(Left(a(i, j), 2), Mid(a(i, j), 3, 2), Mid(a(i, j), 5))  
       Next: Next: [g3:h3000].Value = a
       Range("I4").Select  
   ActiveCell.FormulaR1C1 = "=RC[-4]-RC[-3]"
   Range("I4").Select  
   Selection.AutoFill Destination:=Range("I4:I1099"), Type:=xlFillDefault  
   Range("I4:I2000").Select  
   Sheets("PA_command_recep_par_CM_New").Select  
   Range("A1").Select  
With ActiveSheet.[a1].CurrentRegion
.AutoFilter 9, "<10"  
.Offset(1).SpecialCells(12).EntireRow.Delete  
.Parent.AutoFilterMode = 0  
.Sort Key1:=Range("I1"), Order1:=xlAscending, Header:=xlGuess, _  
OrderCustom:=1, Orientation:=xlTopToBottom  
End With  
Range("J2").Select  
   ActiveCell.FormulaR1C1 = _  
       "=VLOOKUP(RC[-6]:R[998]C[-6],'[Повні невиконання замовлень Потижнево.xls]Повні невиконання'!C1:C4,1,FALSE)"
   Selection.AutoFill Destination:=Range("J2:J700")  
   Range("J2:J700").Select  
   Range("K2").Select  
   ActiveCell.FormulaR1C1 = _  
       "=VLOOKUP(RC[-7]:R[998]C[-7],'[Аномалії приймання Загальний звіт 2012.xls]Звіт'!C4:C7,1,FALSE)"
   Selection.AutoFill Destination:=Range("K2:K900")  
   Range("K2:K900").Select  
         IName = Звіт  
 
   iFullName = "O:\ЗВІТИ 2012\Звіт тижневий основний\Основний готовий звіт.xls" & IName  
   With Application  
 
       .EnableEvents = False  
 
       .Workbooks.Open Filename:=iFullName  
 
       .EnableEvents = True  
       End With  
With Application  
.Calculation = xlCalculationManual  
.ScreenUpdating = False  
.EnableEvents = False  
End With  
 
    Windows("PA_command_recep_par_CM_New.xls").Activate  
   Range("A2:K1200").Select  
   Selection.Copy  
   Windows("Основний готовий звіт.xls").Activate  
   Range("I4:I800").Value = Range("I4:I800").Value  
   Range("A3").Select  
   ActiveSheet.Paste  
Selection.AutoFilter Field:=6, Criteria1:="null"  
   Selection.AutoFilter Field:=10, Criteria1:="#n/a"  
   Range("A3:K1500").Select  
   Selection.ClearContents  
   Selection.AutoFilter Field:=6  
   Selection.AutoFilter Field:=10  
Range("I4:I1000").Select  
   Selection.Copy  
   ActiveWindow.SmallScroll Down:=-54  
   Range("I4").Select  
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _  
       :=False, Transpose:=False  
   With Sheets("Report").UsedRange  
.Parent.AutoFilterMode = 0  
.AutoFilter 8, "null"  
.AutoFilter 10, "#n/a"  
.Offset(1).SpecialCells(12).EntireRow.Delete  
.AutoFilter 10  
.Columns(7).Offset(1).SpecialCells(12).Copy Sheets("Failure to complete order").[a1]
.Columns(3).Offset(1).SpecialCells(12).Copy Sheets("Failure to complete order").[b1]
.Columns(4).Offset(1).SpecialCells(12).Copy Sheets("Failure to complete order").[d1]
.Columns(2).Offset(1).SpecialCells(12).Copy Sheets("Failure to complete order").[e1]
.Columns(5).Offset(1).SpecialCells(12).Copy Sheets("Failure to complete order").[f1]
.Parent.AutoFilterMode = 0  
End With  
 
Dim iRange As Range  
Dim TextToFind As Variant  
 
TextToFind = "null" 'искомый текст  
If TextToFind = "" Or TextToFind = False Then Exit Sub  
TextToFind = Trim(TextToFind)  
With ActiveSheet.Cells  
Set iRange = .Find(What:=TextToFind, LookIn:=xlFormulas, Lookat:=xlPart)  
If Not iRange Is Nothing Then  
Do  
iRange.EntireRow.Delete  
Set iRange = .Find(What:=TextToFind, LookIn:=xlFormulas, Lookat:=xlPart)  
Loop While Not iRange Is Nothing  
Else  
Exit Sub  
End If  
End With  
With Sheets("Report").UsedRange  
.Parent.AutoFilterMode = 0  
.AutoFilter 11, "#n/a"  
.Columns(8).Offset(1).SpecialCells(12).Copy Sheets("Partial default order").[a1]
.Columns(3).Offset(1).SpecialCells(12).Copy Sheets("Partial default order").[b1]
.Columns(4).Offset(1).SpecialCells(12).Copy Sheets("Partial default order").[d1]
.Columns(2).Offset(1).SpecialCells(12).Copy Sheets("Partial default order").[e1]
.Columns(9).Offset(1).SpecialCells(12).Copy Sheets("Partial default order").[f1]
.Offset(1).SpecialCells(12).EntireRow.Delete  
.AutoFilter 11  
.Parent.AutoFilterMode = 0  
End With  
With Sheets("Report").UsedRange  
       .Parent.AutoFilterMode = 0  
       .Columns(8).Offset(1).SpecialCells(12).Copy Sheets("Acts of acceptance").[a1]
       .Columns(3).Offset(1).SpecialCells(12).Copy Sheets("Acts of acceptance").[b1]
       .Columns(4).Offset(1).SpecialCells(12).Copy Sheets("Acts of acceptance").[d1]
       .Columns(2).Offset(1).SpecialCells(12).Copy Sheets("Acts of acceptance").[e1]
       .Columns(9).Offset(1).SpecialCells(12).Copy Sheets("Acts of acceptance").[f1]
       .Parent.AutoFilterMode = 0  
       End With  
Windows("Аномалії приймання в заданий період.xls").Activate  
Dim FaCom1(), FaCom2(), ParOrd1(), ParOrd2(), Act1(), Act2()  
Application.ScreenUpdating = False  
   Windows("Основний готовий звіт.xls").Activate  
   FaCom1 = Sheets("Failure to complete order").Range("A1").CurrentRegion.Value  
   FaCom2 = Sheets("Failure to complete order").Range("D1").CurrentRegion.Value  
   ParOrd1 = Sheets("Partial default order").Range("A1").CurrentRegion.Value  
   ParOrd2 = Sheets("Partial default order").Range("D1").CurrentRegion.Value  
   Act1 = Sheets("Acts of acceptance").Range("A1").CurrentRegion.Value  
   Act2 = Sheets("Acts of acceptance").Range("D1").CurrentRegion.Value  
     
     
   ''''''  ''''''  ''''''  ''''''  ''''''  ''''''  ''''''  
With Application  
.Calculation = xlCalculationAutomatic  
.ScreenUpdating = True  
.EnableEvents = True  
End With  
 
''''''  ''''''  ''''''  ''''''  ''''''  ''''''  ''''''  
 
Windows("Аномалії приймання в заданий період.xls").Activate  
   With Sheets("Звіт")  
       .Cells(2, 1).Resize(UBound(FaCom1), UBound(FaCom1, 2)) = FaCom1  
       .Cells(2 + UBound(FaCom1), 1).Resize(UBound(ParOrd1), UBound(ParOrd1, 2)) = ParOrd1  
       .Cells(2 + UBound(FaCom1) + UBound(ParOrd1), 1).Resize(UBound(Act1()), UBound(Act1(), 2)) = Act1()  
         
       .Cells(2, 4).Resize(UBound(FaCom2), UBound(FaCom2, 2)) = FaCom2  
       .Cells(2 + UBound(FaCom2), 4).Resize(UBound(ParOrd2), UBound(ParOrd2, 2)) = ParOrd2  
       .Cells(2 + UBound(FaCom2) + UBound(ParOrd2), 4).Resize(UBound(Act2()), UBound(Act2(), 2)) = Act2()  
       .Cells(2, 7).Resize(UBound(FaCom1)).Value = 23  
       .Cells(2 + UBound(FaCom1), 7).Resize(UBound(ParOrd1)).Value = 42  
       .Cells(2 + UBound(FaCom1) + UBound(ParOrd1), 7).Resize(UBound(Act1)).Value = 43  
       End With  
Application.ScreenUpdating = True  
   Application.CutCopyMode = False  
   Windows("PA_command_recep_par_CM_New.xls").Close False  
    Application.CutCopyMode = False  
   Windows("Основний готовий звіт.xls").Close False  
End Sub
 
Ваш макрос надо весьма заметно чистить от Select и Activate - а потом думать насчет прогресс-бара.  
 
Сейчас, в этот ужас, сложно что-то вставить.  
 
ScreenUpdating надо отключать в самом начале макроса, а не в середине - быстрее будет работать.  
 
И незачем всё в одном макросе городить - разбили бы обработку на несколько макросов или функций.  
 
Лучше переписать макрос «с нуля», - так, что он будет отрабатывать за пару секунд, - тогда и прогресс-бар не понадобится.
 
Вужик, такие длинные листнги лучше выкладывать в прикреплённом txt-файле.
 
Вот, к примеру, этот участок кода:  
 
Range("J2:J700").Select  
Range("K2").Select  
ActiveCell.FormulaR1C1 = _  
"=VLOOKUP(RC[-7]:R[998]C[-7],'[Аномалії приймання Загальний звіт 2012.xls]Звіт'!C4:C7,1,FALSE)"
Selection.AutoFill Destination:=Range("K2:K900")  
Range("K2:K900").Select  
 
 
Нафига столько много писать?  
Куда проще и быстрее будет так:  
 
Range("K2:K900").FormulaR1C1 = "=VLOOKUP(RC[-7]:R[998]C[-7],'[Аномалії приймання Загальний звіт 2012.xls]Звіт'!C4:C7,1,FALSE)"
 
Разницу в количестве строк чувствуете?  
Вот когда весь макрос в таком виде будет - тогда другое дело, можно подумать, как приделать прогресс-бар  
 
 
И кучу строк типа  
 
Selection.AutoFilter Field:=1, Criteria1:="17"  
Rows("4:3000").Select  
Selection.Delete Shift:=xlUp  
 
можно оформить в виде цикла.
 
Лучше бы файл с макросом выложили
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Спасибо Вам.  
А чем заменить  Select и Activate?  
Относительно .txt не знал. Извиняюсь
 
Ничем... к примеру:  
Range("A3:K1500").Select  
Selection.ClearContents  
 
Получается:  
Range("A3:K1500").ClearContents
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Спасибо. Буду заменять.  
И Все таки куда можно попробовать вставить мой StatusBar?
 
В начало и в конец кода
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Я бы просто выводил в статусбар описание этапов работы, т.к. кажется честные проценты тут пристроить не получится.  
Это если действительно что-то будет долго делаться.  
Т.е. перед вставкой ВПР() так и пишем:  
Application.statusbar="вставка ВПР()"  
Ну а процент расчёта формул вроде автоматом выводится... Или не будет вместе с статусбаром? Давно такого не делал, чтоб долго формулы считались...
 
Если Вас правильно понял, то примерно так:  
Sub Макрос ()  
For i = 1 To 10000  
p = i \ 100  
Application.StatusBar = "выполнена:" & p & "%" & String (p \ 10 + 1, ChrW (8700))  
DoEvents  
Next  
Application.StatusBar = False  
....... Дальше выполняется основной макрос .......  
 
For i = 1 To 10000  
p = i \ 100  
Application.StatusBar = "выполнена:" & p & "%" & String (p \ 10 + 1, ChrW (8700))  
DoEvents  
Next  
Application.StatusBar = False  
End Sub  
Но в этом случае нет настоящего расчета ..... (
Страницы: 1
Читают тему
Наверх
Loading...