Страницы: 1
RSS
Как вставить СтатусБар с циклом , в макрос с несколькими циклами ?
 
Уважаемые форумчане подскажите , пожалуйста . Здесь на форуме и на других , много искал , но об этом конкретной информации нет . Вот макросы СтатусБара :  
 
 
 
Sub test1()  
   For i = 1 To 10000  
       p = i \ 100: s = "": For j = 10102 To 10102 + p \ 10: s = s & ChrW(j): Next  
       Application.StatusBar = "Выполнено: " & p & "% " & s: DoEvents: DoEvents  
   Next  
   Application.StatusBar = False  
End Sub  
 
 
Sub test2()  
   For i = 1 To 10000  
       p = i \ 100: s = String(p \ 10, ChrW(10152)) & String(10 - p \ 10, ChrW(8700))  
       Application.StatusBar = "Выполнено: " & p & "% " & s: DoEvents  
   Next  
   Application.StatusBar = False  
End Sub  
 
 
Вопрос :  Как один из них , можно вложить в мой макрос (мне нужно все листы прогнать без остановки).  
Вот мой макрос:  
 
                           
Sub Макрос4()  
Dim i As Variant  
Application.ScreenUpdating = True  
For i = 1 To 1500  
Worksheets(i).Select  
Sheets.Add After:=Sheets(Sheets.Count)  
Dim c As Range  
For Each c In Range("A1:G900,J1:P900,S1:Y900").Cells  
  Randomize  
c.Value = Int((2 * Rnd) + 1)  
Next c  
 
(здесь ещё код , но без цикла)  
 
Next i  
Application.ScreenUpdating = False  
End Sub
 
Попробуйте такой вариант:  
 
Sub Макрос4()  
   Dim c As Range, n As Long, i As Long  
   n = 15: Randomize  
   Application.ScreenUpdating = False  
   For i = 1 To n  
       p = 100 * i \ n: s = String(p \ 10, ChrW(10152)) & String(10 - p \ 10, ChrW(8700))  
       Application.StatusBar = "Выполнено: " & p & "% " & s: DoEvents  
 
       Sheets.Add After:=Sheets(Sheets.Count)  
       For Each c In Range("A1:G900,J1:P900,S1:Y900").Cells  
           c.Value = Int((2 * Rnd) + 1)  
       Next c  
       '(здесь ещё код , но без цикла)  
   Next i  
   Application.StatusBar = False  
End Sub  
 
 
 
Пример в файле: http://excelvba.ru/XL_Files/Sample__25-12-2010__19-17-29.zip  
 
Можно и графический вариант применить: http://excelvba.ru/tools/ProgressIndicator  
 
PS: При добавлении в книгу 1500 листов, макрос, или сам Excel, скорее всего, вылетит с ошибкой.  
Поэтому в примере ограничил кол-во листов до 15
 
Код можно ускорить в десятки раз, если вместо перебора ячеек в цикле:  
 
For Each c In Range("A1:G900,J1:P900,S1:Y900").Cells  
c.Value = Int((2 * Rnd) + 1)  
Next c  
 
записывать сразу во все ячейки либо формулы (с последующей заменой значениями),  
либо записывать на лист двумерный массив (заранее сформированный в цикле)
 
Огромное Вам , спасибо EducatedFool , всё получилось на 1500 листов !!!
Страницы: 1
Читают тему
Наверх
Loading...