Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 13:58   #1
Richard123
Пользователь
 
Регистрация: 17.01.2011
Сообщений: 26
По умолчанию Цикл для каждого листа.

Добрый день!

Есть вопрос! Как правильно написать макрос в котором выполнялась бы вот такие процедуры для каждого листа?

Код:

Sub Capsula_Rows_Var_and_Head()

Dim RowVar As Long
RR = 11

For RowVar = Cells(ROWS.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(RowVar, 1) <> Cells(RowVar - 1, 1) Then ROWS(RowVar).Resize(RR).Insert
Next

For RowVar = Cells(ROWS.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(RowVar, 1) <> Cells(RowVar - 1, 1) Then
If Cells(RowVar - 1, 1) = 0 Then
If Cells(RowVar, 1) = Cells(RowVar + 1, 1) Then


    Range("1:1").Copy ROWS(RowVar - 1)

End If
End If
End If
Next

ROWS("1:11").Delete Shift:=xlUp
Я знаю что есть For Each sh In Sheets, но не умею пользоваться. Когда просто подставляю то получает что внутренний цикл выполняется столько раз сколько листов в книге...

Последний раз редактировалось Richard123; 24.01.2011 в 15:04. Причина: Переписал макрос
Richard123 вне форума Ответить с цитированием
Старый 24.01.2011, 15:49   #2
Александр 33
Пользователь
 
Регистрация: 02.01.2011
Сообщений: 10
По умолчанию

Может быть это :

Sub Capsula_Rows_Var_and_Head()
Dim J As Variant
Dim RowVar As Long
RR = 11
For J = 1 To Sheets.Count
Sheets(J).Activate
For RowVar = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(RowVar, 1) <> Cells(RowVar - 1, 1) Then Rows(RowVar).Resize(RR).Insert
Next
For RowVar = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(RowVar, 1) <> Cells(RowVar - 1, 1) Then
If Cells(RowVar - 1, 1) = 0 Then
If Cells(RowVar, 1) = Cells(RowVar + 1, 1) Then
Range("1:1").Copy Rows(RowVar - 1)
End If
End If
End If
Next
Rows("1:11").Delete Shift:=xlUp
Next J
End Sub
Александр 33 вне форума Ответить с цитированием
Старый 24.01.2011, 15:51   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub test()
    Application.ScreenUpdating = False    ' отключаем обновление экрана
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Worksheets    ' перебираем все листы
        sh.Activate    ' активируем лист
        Capsula_Rows_Var_and_Head    ' запускаем ваш макрос для очередного листа
    Next sh
End Sub
' ниже пишете свой макрос
EducatedFool вне форума Ответить с цитированием
Старый 24.01.2011, 16:11   #4
Richard123
Пользователь
 
Регистрация: 17.01.2011
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Александр 33 Посмотреть сообщение
Может быть это :

Sub Capsula_Rows_Var_and_Head()
Dim J As Variant
Dim RowVar As Long
RR = 11
For J = 1 To Sheets.Count
Sheets(J).Activate
For RowVar = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(RowVar, 1) <> Cells(RowVar - 1, 1) Then Rows(RowVar).Resize(RR).Insert
Next
For RowVar = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(RowVar, 1) <> Cells(RowVar - 1, 1) Then
If Cells(RowVar - 1, 1) = 0 Then
If Cells(RowVar, 1) = Cells(RowVar + 1, 1) Then
Range("1:1").Copy Rows(RowVar - 1)
End If
End If
End If
Next
Rows("1:11").Delete Shift:=xlUp
Next J
End Sub
Работает. Большое Спасибо.



Код:

Цитата:
Сообщение от EducatedFool

Код:
Sub test()
    Application.ScreenUpdating = False    ' отключаем обновление экрана
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Worksheets    ' перебираем все листы
        sh.Activate    ' активируем лист
        Capsula_Rows_Var_and_Head    ' запускаем ваш макрос для очередного листа
    Next sh
End Sub
' ниже пишете свой макрос
не работает. Точнее если запускать из VBA обратывает 1-ый лист, а остальные не трогает. =((
Richard123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в этом макросе указать , что-бы было название каждого листа и книги ,при сборе всех листов на один ? Александр 33 Microsoft Office Excel 9 06.01.2011 18:40
Как обрубить скорость для каждого IP element1990 PHP 1 10.12.2010 14:44
index для каждого поля или нескольких iankov SQL, базы данных 3 11.07.2010 19:54
посчитать значение по каждой статье за определенный период для каждого листа Graver Microsoft Office Excel 5 04.12.2009 01:31
Drag'n'Drop для каждого компонента kiber_punk Общие вопросы Delphi 16 01.12.2008 09:11