Страницы: 1
RSS
Применение "Progress Bar" к простому циклу. (vba)
 
Добрый день  
Я прикрепил файл и там простенький макрос (часть данных удалено, чтобы соблюдать размер файла).    
Прошу поставить именно на этот макрос "Progress Bar"  
Заранее большое спасибо!
With my best regards,      Inter_E
 
не знаю правильно или нет...
 
{quote}{login=}{date=25.08.2010 09:20}{thema=}{post}не знаю правильно или нет...{/post}{/quote}  
 
Да, спасибо, работает. Но медленне стал чем оригинал.  
А с Each почему не сделали... Просто с Each гораздо быстрее чем For работает макрос  
Сейчас разбираюсь!
With my best regards,      Inter_E
 
с Each  не знаю как...
 
А не проще ваш макрос заменить на этот  
Sub demo()  
Dim i As Long, iLR As Long  
iLR = Cells(Rows.Count, 2).End(xlUp).Row  
ReDim dd(1 To iLR)  
For i = 1 To iLR  
dd(i) = CDate(Cells(i + 4, 2))  
Next  
Range("B5:B" & iLR) = dd  
End Sub  
 
Работает явно быстрее, чем ваш вариант, и прогрессбар можно не прикручивать.
 
{quote}{login=}{date=25.08.2010 09:38}{thema=}{post}с Each  не знаю как...{/post}{/quote}  
 
в 3 раза стал медленне работать...  
А вообще применение прогресс бара или Статус Бара чуть тормозит процесс, это так?
With my best regards,      Inter_E
 
ПрогрессБар - это ведь дополнительное время. Соответственно, скорость снизится. Но в ТРИ раза - это перебор!
 
{quote}{login=}{date=25.08.2010 09:38}{thema=}{post}с Each  не знаю как...{/post}{/quote}  
 
     For Each c In Sheets(A).Range("B5:B" & iLR)  
     i = i + 1  
           U.ProgressBar1.Value = i  
       c.Value = CDate(c.Value)  
     Next
 
{quote}{login=sva}{date=25.08.2010 09:46}{thema=}{post}А не проще ваш макрос заменить на этот  
Sub demo()  
Dim i As Long, iLR As Long  
iLR = Cells(Rows.Count, 2).End(xlUp).Row  
ReDim dd(1 To iLR)  
For i = 1 To iLR  
dd(i) = CDate(Cells(i + 4, 2))  
Next  
Range("B5:B" & iLR) = dd  
End Sub  
 
Работает явно быстрее, чем ваш вариант, и прогрессбар можно не прикручивать.{/post}{/quote}  
 
Да, есть много методов по быстроте без ПБара, но я в этой теме хотел использовать именно ПБ на этот макрос..
With my best regards,      Inter_E
 
Так если через массив, так уж сразу вообще без перебора листа делать. И прогрессбар можно fake сделать, например на секунду или две, т.к. работа будет за 0,005 сек. происходить.
 
{quote}{login=Hugo}{date=25.08.2010 11:06}{thema=}{post}Так если через массив, так уж сразу вообще без перебора листа делать. И прогрессбар можно fake сделать, например на секунду или две, т.к. работа будет за 0,005 сек. происходить.{/post}{/quote}  
 
А как преобразовать даты без перебора?  
 
С прогрессбаром и перебором так:  
 
Sub demo()  
Dim i As Integer, iLR As Long  
iLR = Cells(Rows.Count, 2).End(xlUp).Row  
ReDim dd(1 To iLR)  
U.Show  
U.ProgressBar1.Max = iLR  
For i = 1 To iLR  
dd(i) = CDate(Cells(i + 4, 2))  
U.ProgressBar1.Value = i  
Next  
Range("B5:B" & iLR) = dd  
Unload U  
End Sub
 
Как преобразовать?  
Я думаю, если работает (не проверял)  
dd(i) = CDate(Cells(i + 4, 2))  
Next  
Range("B5:B" & iLR) = dd  
 
то должно сработать типа (массив естественно другой будет)  
 
dd(i) = CDate(dd(i))  
Next  
Range("B5:B" & iLR) = dd
 
Если сделать массив так dd = Range(Cells(5, 2), Cells(iLR, 2)), то потом не удается обращаться к нему же по-элементно и преобразовать данные тоже не получится. Без перебора никак, хотя может это я не то делаю.
 
Почему? Вы не используете окно Locals?  
 
dd(i,1) - cdate(dd(i,1)
 
С коленки писал, извините. Вот проверено:  
 
Sub My_method()  
tm = Timer  
   A = ActiveSheet.Name  
   Dim iLR As Long  
  iLR = Worksheets(A).Cells(Rows.Count, 2).End(xlUp).Row  
   dd = Range(Cells(5, 2), Cells(iLR, 2))  
     
   For i = 1 To UBound(dd)  
   dd(i, 1) = CDate(dd(i, 1))  
Next  
 
Range(Cells(5, 2), Cells(iLR, 2)) = dd  
Debug.Print Timer - tm  
End Sub  
 
0.1875 сек.  
Но вот есть ли результат - не проверял :), с виду всё по прежнему.
 
К стыду своему - Это где такое окно включается?
 
Все нашел.
 
Хотя что-то мне кажется, что массив перебирать и не надо (хотя на время это и не влияет). Достаточно взять в массив и выгрузить назад. Так? Не могу проверить, сработало или нет...
 
Нет, перебирать нужно, т.к. изначально это дата, как текст и если загрузить/ вставить так и останется.
 
Да, но в окне Locals видно ( :)) , что в массиве dd(1,1) сразу уже #19.08.2010#
 
Я так понимаю,в приложенном файле ТС даты в нормальном виде, а изначально они в виде текста. ТС просил прогрессбар прикрутить.
 
Да, вероятно, то я чую - что-то не так... :)  
Но под эту задачу на 0,18 сек. прогрессбар ставить не стоит.
 
Ну,у кого как,у меня на работе это выполняется 1.7 сек. :)
 
А вообще прогрессбар классный, я до этого всё какие-то сложные видел, и не использовал, статусбаром обходился. А этот буду впредь юзать при случае.
 
{quote}{login=Hugo}{date=25.08.2010 12:34}{thema=}{post}А вообще прогрессбар классный, я до этого всё какие-то сложные видел, и не использовал, статусбаром обходился. А этот буду впредь юзать при случае.{/post}{/quote}  
 
Вот я тоже именно этого хотел сказать...  
Спасибо за этот ПБ он очень ПРОСТОЙ, я тоже раньше точно такого без огромныз кодов не встречал...  
Но незная кого благодарить, т.к. он был без имени :)))
With my best regards,      Inter_E
 
В принципе тот же пример (прикр.файл - я там в макросе еще комменты сделал), но  
КОГДА ВРУЧНУЮ ВЫДЕЛЯЮ КАК ЗДЕСЬ БЫТЬ?  
Немогу получить конечный координат Selection-a  
Заранее благодарен...
With my best regards,      Inter_E
 
iLR = Selection.Rows.Count
 
{quote}{login=Hugo}{date=25.08.2010 03:05}{thema=}{post}iLR = Selection.Rows.Count{/post}{/quote}  
 
Спасибо! Отлично сработало!!!  
Хьюго вы сегодня №1 в моей рейтинге...  
РЕСПЕКТ...
With my best regards,      Inter_E
 
{quote}{login=Inter_E}{date=25.08.2010 03:23}{thema=Re: }{post}{quote}{login=Hugo}{date=25.08.2010 03:05}{thema=}{post}iLR = Selection.Rows.Count{/post}{/quote}  
 
Спасибо! Отлично сработало!!!  
Хьюго вы сегодня №1 в моей рейтинге...  
РЕСПЕКТ...{/post}{/quote}  
 
Всем новичкам проекта ProgressBar, рекомендую этот пост!!!  
Кажется мы добились, до этого не было столь простого применения ПБ!  
Спасибо всем за содействие в данном проекте, теперь в дальнейшем будем исследовать сложные ПБ
With my best regards,      Inter_E
 
Автор этого PB неизвестен... :)
Страницы: 1
Читают тему
Наверх