The okk
 
  
  Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору aks_sv    Цитата: Sub Макрос1()        Dim LastRow As Long, r As Long        'Определяем последнюю строчку        LastRow = Range("A65536").End(xlUp).Row        For r = 4 To LastRow 'имеется ввиду, что три листа есть            Sheets.Add        Next r    End Sub   |      Надеюсь, мои комментарии помогут тебе лучше понять VBA... хотя бы немного:    Код:|  Dim LastRow As Long, r As Long   |    - Грамотно, в одну строчку. Выбранные типы, соответствуют разрядности системы (32), что даст небольшой выигрыш по быстродействию. Тут претензий нет... только в будущем лучше избегать всяких однобуквенных имен - сам потом запутаешься. Лучше что-то "говорящее". Например, "SheetsCount". Имя переменной лучше начинать с "префикса"-сокращения типа. В данном случае lng. Это, разумеется, необязательно, но иногда бывает полезно.    Код:|  LastRow = Range("A65536").End(xlUp).Row   |    По сути тоже правильно. Можно было бы и Cells вместо Range поставить, но не существенно. Последняя строка определена грамотно.   -     
 Код: For r = 4 To LastRow 'имеется ввиду, что три листа есть            Sheets.Add        Next r   |    А вот тут уже хуже. Использован цикл, где без него можно было обойтись. Это, конечно, ошибкой не назовешь, но недочет - это точно. Я имею в виду, что можно было сразу добавить нужное количество листов использовав параметр Count метода Add. А именно: Код:    Sheets.Add Count:=LastRow-3  |      Кроме того, количество листов можно было и определить (и не надо было бы ничего иметь в виду   ). Количество листов можно получить так:  Код:    - Итого, весь твой код умещается в одну строку: 
   Код: Sub Макрос1()            Sheets.Add Count:=Range("A65536").End(xlUp).Row - Sheets.Count   End Sub   |  
  - Понятно, что в таком виде код будет вызывать сбой, если строк в первом столбце меньше, чем в книге листов (можешь проверить). Поэтому надо избавиться от сообщения ошибки:
 Код: Sub Макрос1()    On Error Resume Next           Sheets.Add Count:=Range("A65536").End(xlUp).Row - Sheets.Count   End Sub   |   Теперь ошибку мы не увидим и листы молча не добавятся.    - Процесс пойдет быстрее, если мы не станем наблюдать за добавлением листов, т.е. просто отключим обновление экрана:
 Код: Sub Макрос1()    On Error Resume Next   Application.ScreenUpdating = False           Sheets.Add Count:=Range("A65536").End(xlUp).Row - Sheets.Count   'следующая строка вернет обновление экрана, но она не обязательна,   'поскольку обновление экрана восстановится автоматически    'по завершению процедуры   Application.ScreenUpdating = True    End Sub   |  
  
  |   Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено:  15:39 02-02-2007  | Исправлено: The okk,   15:58 02-02-2007    |  
  |