Страницы: 1
RSS
Оптимизировать код форматирования строк
 
Добрый день, уважаемые форумчане.

Прошу строго не судить я только учусь , :)
взглянуть код и помочь оптимизировать его.

Вопрос не по теме удален
Изменено: АналитикБУ - 06.02.2020 10:37:46
 
Цитата
АналитикБУ написал:
взглянуть код и помочь оптимизировать его
а помочь чем? Вы понимаете, что без конкретики тема просто в флуд превратится. Т.к. для того чтобы хоть что-то посоветовать надо сначала вникнуть в Ваш код, попытаться понять что он делает, что должен делать, потестировать тут и там, сделать выводы насчет скорости, угадать нормально это или нет и только потом что-то предложить. Кому это надо? Вы напишите для начала что код делает и что не устраивает. Тогда хоть можно будет куда-то целенаправленно смотреть, а не потрошить весь Ваш файл и искать где там чего оптимизировать можно(притом у каждого свои понятия оптимизации).
Цитата
АналитикБУ написал:
Дополнительно прошу
модераторы явно попросят дополнительно прочесть правила форума и следовать им - один вопрос, одна тема. Да и точнее опять же надо выражаться: уровень - это что? IndentLevel? Или там какая-то группировка должна быть? Да и выделить вроде не проблема - можно макросом записать действие и останется только диапазон нужный подпихнуть.
Поэтому вопрос: код-то кто писал? Сами или Вам его предоставили?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Сейчас долго отрабатывает скорее всего из-за того, что в конце у Вас слишком часто идут обращения к ячейкам. Но тут вряд ил что-то можно сильно оптимизировать, не вникнув в код. Навскидку можно сказать, что можно бы создавать сначала в памяти диапазоны с разным форматированием, а потом уже их форматировать.
Пример подобного подхода:
Код
If Cells(t, 1) = 0 Then
    If rngFSize14 Is Nothing then
        set rngFSize14 = Cells(t, 2)
    else
        set rngFSize14 = union(rngFSize14,Cells(t, 2))
    end if
end if
'///после всех циклов
If not rngFSize14 Is Nothing then
With rngFSize14
    .Font.Size = 14
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .Font.Name = "Arial Black"
    .Entirerow.RowHeight = 37.5
end with
end if
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, код разрабатывался совместно. Та часть что работает достаточно быстро. предоставлена.
Моя же как раз та про которую вы сказали. Связана с форматированием. И вы правильно поняли что она отрабатывает медленно.
Спасибо за подсказку с диапазонами.

Прошу помочь решить второй вопрос. С уровнями.
Уровни они прописываются в столбце А и начинаются от 0 до 5
Я хочу по нажатию кнопки удалять все строки где в столбце А указаны эти уровни, если же значение в столбце А пустое, но пропускать.

Сейчас решил так, но тоже не панацея. Пробегает по всем строкам и почему то пропускает некоторые. После повторного запуска все повторяется. Прогнав несколько раз макрос полностью удаляет строки.

Писал так:
Код
Sub Clean()
   With Sheets("ОтчетнаяФорма")
       Dim t As Integer
       Dim iLastRow As Long
       iLastRow = [A12].End(xlDown).Row
            For t = 12 to iLastRow
                If Cells(t,1) <> "" Then Rows(t).Delete
            Next t
    End With
End Sub


 
Если удаляете строки - то циклы надо делать в обратную сторону, иначе какие-то строки будут пропущены. Например, было 10 строк. Цикл от 1 до 10. Удалили при третьем проходе строку. Это значит, что строк осталось 9 и при этом 4-я стала третьей. Но цикл-то пошел дальше! И 4-я строка в итоге просто не проверяется. Правильный цикл:
Код
For t = iLastRow To 12 Step -1
    If Cells(t,1) <> "" Then Rows(t).Delete
Next t
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, Благодарю
 
АналитикБУ, название темы должно отражать не только "помогите", но и задачу, которая решается макросом.
Лодно, кривое название. Заходим в первое сообщене - где конкретика? Где-то как-то чего-то нужно помочь... Задача должна быть описана в сообщении.

А Дмитрий вместо Вас еще и над названием должен думать (предложил новое)...
Страницы: 1
Наверх