|
|
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
Здраствуйте! у меня имеется около 400 строк в exel листе, есть код, который удаляет строки не отмеченные галочками (chekbox)! Все работает, но очень медленно (построчное удаление)!!!! Какие будут версии по увеличению быстродействия удаления??? код: Dim i As Integer Dim Flag As Boolean Dim Cb As Object Dim deleted As Integer deleted = 0 For Each Cb In Me.OLEObjects If (InStr(1, Cb.Name, "Check") > 0) Then If (Len(Cb.Object.Caption) > 0 And Cb.Object.Value = False) Then i = CInt(Cb.Object.Caption) - deleted лист1.Rows(i).Delete deleted = deleted + 1 Next j Flag = True While (лист1.Cells(i, 2) = "" And Flag = True) If (i >= лист1.UsedRange.Rows.Count) Then Flag = False лист.Rows(i).Delete deleted = deleted + 1 Wend End If End If Next ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2006, 17:53 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
1. В начале Application.ScreenUpdating=False, в конце - True 2. Что за не-пришей-рукав Next j? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 11:14 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
авторЧто за не-пришей-рукав Next j? ржупацстулом. 5 баллов. вообще для начала надо отформатировать код, а то нифига не понятно. сделала это за автора. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 11:21 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
Настенька вообще для начала надо отформатировать код, а то нифига не понятно. сделала это за автора. Настенька, ЭТО не форматирование, это всего-лишь обертывание чужого кода тэгами src-/src, не надо это делать. Бессмысленно, а место на экране занимает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 18:41 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
White Owl, Ясно же, что Настенька просто ошиблась. Что тут такого? Ну давай еще опечатки коллекционировать. А по делу? Я что-то не понял, там на каждой строке стоят чек боксы, а автор желает их удалять вместе сo строками, если боксы чекнуты? Там на самом деле ЧЕТЫРЕСТА чек боксов что-ли? VladConn ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 19:08 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
VladConnWhite Owl, Ясно же, что Настенька просто ошиблась. Что тут такого?"Просто ошибиться" можно один раз. Повторять одну и ту же ошибку несколько раз - это уже тенденция. VladConnА по делу? Я что-то не понял, там на каждой строке стоят чек боксы, а автор желает их удалять вместе сo строками, если боксы чекнуты? Там на самом деле ЧЕТЫРЕСТА чек боксов что-ли?Угу, именно это он и делает. А если еще учесть что там в оригинальном макросе был какой-то еще блок (от которого остался загадочный Next j), то ничего удивительного что макрос тормозит. Stanislaus, убери чекбоксы, помечай строки на удаление цветом, или текстом в специальной ячейке. Чекбоксы в каждой строке это очень плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 19:37 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
Antonariy1. В начале Application.ScreenUpdating=False, в конце - True 2. Что за не-пришей-рукав Next j? да это описка! cсам не пойму откуда там это взялось у меня в исходнике нет этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 19:44 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
VladConnWhite Owl, Ясно же, что Настенька просто ошиблась. Что тут такого? Ну давай еще опечатки коллекционировать. А по делу? Я что-то не понял, там на каждой строке стоят чек боксы, а автор желает их удалять вместе сo строками, если боксы чекнуты? Там на самом деле ЧЕТЫРЕСТА чек боксов что-ли? VladConn да именно на каждой строке чекбоксы, пользователь отмечает чекбоксы, тем самым отмечая строки для удаления! после нажатия клавиши на форме, все это обрабатывается, лишние строки удаляются, остальные сохраняются в файл! потом все объекты с формы тоже удаляются! там околок 120 чекбоксов, просто под каждым еще 4 строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 19:49 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
VladConn ...Stanislaus, убери чекбоксы, помечай строки на удаление цветом, или текстом в специальной ячейке. Чекбоксы в каждой строке это очень плохо. А здесь уже воля заказчика! Ничего не поделаешь! Да и что в них плохого??? Они не тормозят удаление! вся проблема в переиндексировании строк при удалении!!!! может удалять не rows(i).delete, а скажем range("").delete, будет быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 19:54 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
StanislausА здесь уже воля заказчика! Ничего не поделаешь! Да и что в них плохого??? Они не тормозят удаление! Они очень тормозят удаление. И во вторых, заказчик сам никогда не знает чего хочет и не знает как работает компьютер. Поэтому никогда нельзя идти у него на поводу. Stanislausвся проблема в переиндексировании строк при удалении!!!! Не в переиндексировании строк, а в пересчитывании координат объектов. Stanislausможет удалять не rows(i).delete, а скажем range("").delete, будет быстрее?Это будет медленнее. Не намного, практически не заметно для глаза, но медленнее. Убирай чекбоксы вообще. Хочешь помечать строки на удаление мышкой? Элементарно, выдели в своей таблице колонку и сделай макрос типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 20:28 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
OK, тенденция так тенденция. Мне все равно. А насчет переиндексации строк - можно ведь удалять снизу вверх, без переиндексации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2006, 22:57 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
Ну вас на фиг. хочется сделать как лучше, чтобы видно было нормально. без тегов ничего толком не видно, всё сливается. а вы все злые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2006, 07:58 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
НастенькаНу вас на фиг. хочется сделать как лучше, чтобы видно было нормально. без тегов ничего толком не видно, всё сливается. а вы все злые. вот пример форматирования, а не просто обводка тегом Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2006, 08:27 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
вот единственный нормальный человек объяснил, остальные все только кричат. лучше молчать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2006, 08:41 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
VladConnА насчет переиндексации строк - можно ведь удалять снизу вверх, без переиндексации.Да нету там переиндексации строк. Там есть пересчет ВСЕХ координат OLE-объектов. Эксель для каждого объекта на листе будет спрашивать какие у него координаты, решать надо ли их обновлять, потом (возможно) обновлять. Но так как любое обращение к OLE объекту по довольно медлительное, то при большом их количестве начинаются видимые тормоза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2006, 19:09 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
White Owl Убирай чекбоксы вообще. ТЫ был прав на счет чекбоков (они тормозят)! я взял во внимание твой совет про их удаление и в сочетании со своей реализацией сделал следущее: там гда чекб. отмечены галочками я пометил эти строчки цветом, потом удалил все чекбоксы, и затем уже удалял строки исходя из помеченных! Работает на много быстрее!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2006, 19:16 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
Спасибо всем кто принял участие в обсуждении!!! Особенно Настеньке!!!!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2006, 20:13 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
Да кстати ускорение получилось где то в 8 - 9 раз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2006, 18:33 |
|
||
|
Оптимазация кода VBA!!!!
|
|||
|---|---|---|---|
|
#18+
StanislausДа кстати ускорение получилось где то в 8 - 9 раз! У тебя ведь какая-то табличка на листе? Тогда можно ведь можно просто сделать: DELETE FROM [Sheet1$] WHERE F1 = ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2006, 00:45 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=252&tid=2164754]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 219ms |
| total: | 386ms |

| 0 / 0 |
