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 |
|