Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/По кругу выполнить код. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » По кругу выполнить код. (Макросы/Sub)
По кругу выполнить код.
stalber Дата: Среда, 21.12.2022, 01:19 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 347
Репутация: 7 ±
Замечаний: 40% ±

Excel 2007
Здравствуйте, помогите пожалуйста.

Мне нужно чтобы по кругу выполнялся код.

У меня есть 5 макросов. И нужно чтобы они по порядку включались:
1) Module5
2) Module6
3) Module7
4) Module8
5) Module1
6) Возврат к первому пункту, и так по кругу должен выполняться пока в листе с названием "Jabloki" столбец A не станет пустым. Как только столбец A стал пустым, код останавливается.

PS: Module1 - он удаляет последнюю строку в нескольких листах.
 
Ответить
СообщениеЗдравствуйте, помогите пожалуйста.

Мне нужно чтобы по кругу выполнялся код.

У меня есть 5 макросов. И нужно чтобы они по порядку включались:
1) Module5
2) Module6
3) Module7
4) Module8
5) Module1
6) Возврат к первому пункту, и так по кругу должен выполняться пока в листе с названием "Jabloki" столбец A не станет пустым. Как только столбец A стал пустым, код останавливается.

PS: Module1 - он удаляет последнюю строку в нескольких листах.

Автор - stalber
Дата добавления - 21.12.2022 в 01:19
китин Дата: Среда, 21.12.2022, 07:37 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 6941
Репутация: 1059 ±
Замечаний: 0% ±

Excel 2007;2010;2016
stalber, Ну ведь не первый день на форуме. Еще раз перечитайте Правила. Особеноо про файл пример


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщениеstalber, Ну ведь не первый день на форуме. Еще раз перечитайте Правила. Особеноо про файл пример

Автор - китин
Дата добавления - 21.12.2022 в 07:37
stalber Дата: Среда, 21.12.2022, 10:03 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 347
Репутация: 7 ±
Замечаний: 40% ±

Excel 2007
Извиняюсь, приложил файл пример, помогите пожалуйста.
К сообщению приложен файл: voprosik2112.xlsb(16.1 Kb)
 
Ответить
СообщениеИзвиняюсь, приложил файл пример, помогите пожалуйста.

Автор - stalber
Дата добавления - 21.12.2022 в 10:03
Gustav Дата: Среда, 21.12.2022, 14:47 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2304
Репутация: 918 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
В качестве первого совета - пишите всё в одному модуле. Куча одноименных процедур в разных модулях - нонсенс!

Упакуйте повторяющуюся обработку в процедуру с параметрами и вызывайте ее из главной процедуры с разными исходными данными:
[vba]
Код
Sub mainRun()
    io_param "jabloki", "A1:C3", 3  'из Module5
    io_param "jabloki", "D1:F3", -3 'из Module6
    io_param "jabloki", "G1:I3", 3  'из Module7
    io_param "jabloki", "J1:L3", -3 'из Module8
End Sub

Sub io_param(ByVal sheetName As String, ByVal rangeAddr As String, ByVal colOffset As Integer)
    Dim cell As Range
    For Each cell In Worksheets(sheetName).Range(rangeAddr).Cells
        If cell = 1 Then
            cell.ClearContents
            cell.Offset(0, colOffset).ClearContents
        End If
    Next cell
End Sub
[/vba]
Поместите это всё в Module1 после имеющейся там процедуры DelStr и запускайте mainRun.

В остальном (с удалением строк, пока столбец A не очистится) логики пока не понимаю от слова "совсем". Но давайте по шагам делать. Освойте пока то, что написал. Дальше можно будет в mainRun добавлять нужные действия.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеВ качестве первого совета - пишите всё в одному модуле. Куча одноименных процедур в разных модулях - нонсенс!

Упакуйте повторяющуюся обработку в процедуру с параметрами и вызывайте ее из главной процедуры с разными исходными данными:
[vba]
Код
Sub mainRun()
    io_param "jabloki", "A1:C3", 3  'из Module5
    io_param "jabloki", "D1:F3", -3 'из Module6
    io_param "jabloki", "G1:I3", 3  'из Module7
    io_param "jabloki", "J1:L3", -3 'из Module8
End Sub

Sub io_param(ByVal sheetName As String, ByVal rangeAddr As String, ByVal colOffset As Integer)
    Dim cell As Range
    For Each cell In Worksheets(sheetName).Range(rangeAddr).Cells
        If cell = 1 Then
            cell.ClearContents
            cell.Offset(0, colOffset).ClearContents
        End If
    Next cell
End Sub
[/vba]
Поместите это всё в Module1 после имеющейся там процедуры DelStr и запускайте mainRun.

В остальном (с удалением строк, пока столбец A не очистится) логики пока не понимаю от слова "совсем". Но давайте по шагам делать. Освойте пока то, что написал. Дальше можно будет в mainRun добавлять нужные действия.

Автор - Gustav
Дата добавления - 21.12.2022 в 14:47
stalber Дата: Четверг, 22.12.2022, 01:56 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 347
Репутация: 7 ±
Замечаний: 40% ±

Excel 2007
Цитата
В остальном (с удалением строк, пока столбец A не очистится) логики пока не понимаю от слова "совсем"


дополнил файл
1) нужно запустить mainRun
2) затем запустить код который удаляет нижнюю строку в list1 list2
3) возврат к первому пункту, и так процедуру делать до тех пор пока List1 и List2 не станут полностью пустыми, как только они стали пустыми, код останавливается.
К сообщению приложен файл: voprosik5112.xlsb(20.4 Kb)
 
Ответить
Сообщение
Цитата
В остальном (с удалением строк, пока столбец A не очистится) логики пока не понимаю от слова "совсем"


дополнил файл
1) нужно запустить mainRun
2) затем запустить код который удаляет нижнюю строку в list1 list2
3) возврат к первому пункту, и так процедуру делать до тех пор пока List1 и List2 не станут полностью пустыми, как только они стали пустыми, код останавливается.

Автор - stalber
Дата добавления - 22.12.2022 в 01:56
Gustav Дата: Четверг, 22.12.2022, 03:41 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2304
Репутация: 918 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Ну, допустим, так (прямо как в шахматы играем :) ) - новая редакция mainRun:
[vba]
Код
Sub mainRun()
    Dim iLastRow As Integer, i As Integer
    iLastRow = WorksheetFunction.Max(Sheets("list1").Cells(Rows.Count, 1).End(xlUp).Row, _
                    Sheets("list2").Cells(Rows.Count, 1).End(xlUp).Row)
    For i = iLastRow To 1 Step -1
        io_param "jabloki", "A1:C3", 3
        io_param "jabloki", "D1:F3", -3
        io_param "jabloki", "G1:I3", 3
        io_param "jabloki", "J1:L3", -3
        'следующие две строки мягко заменяют удаление
        Sheets("list1").Rows(i).ClearContents
        Sheets("list2").Rows(i).ClearContents
    Next i
End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеНу, допустим, так (прямо как в шахматы играем :) ) - новая редакция mainRun:
[vba]
Код
Sub mainRun()
    Dim iLastRow As Integer, i As Integer
    iLastRow = WorksheetFunction.Max(Sheets("list1").Cells(Rows.Count, 1).End(xlUp).Row, _
                    Sheets("list2").Cells(Rows.Count, 1).End(xlUp).Row)
    For i = iLastRow To 1 Step -1
        io_param "jabloki", "A1:C3", 3
        io_param "jabloki", "D1:F3", -3
        io_param "jabloki", "G1:I3", 3
        io_param "jabloki", "J1:L3", -3
        'следующие две строки мягко заменяют удаление
        Sheets("list1").Rows(i).ClearContents
        Sheets("list2").Rows(i).ClearContents
    Next i
End Sub
[/vba]

Автор - Gustav
Дата добавления - 22.12.2022 в 03:41
stalber Дата: Суббота, 24.12.2022, 14:59 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 347
Репутация: 7 ±
Замечаний: 40% ±

Excel 2007
Почему то не получается запустить.
К сообщению приложен файл: 5104495.jpg(32.2 Kb) · voprosik6112.xlsb(17.8 Kb)


Сообщение отредактировал stalber - Суббота, 24.12.2022, 15:00
 
Ответить
СообщениеПочему то не получается запустить.

Автор - stalber
Дата добавления - 24.12.2022 в 14:59
Gustav Дата: Суббота, 24.12.2022, 18:10 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 2304
Репутация: 918 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
не получается запустить

Ну, ёлки зелёные... Мы же проходили уже эту ситуацию борьбы с красными строками в редакторе кода после вставки несколько дней назад здесь. Напомню: надо удалить в красных строках (а может и не только в них) начальные отступы, т.е. клавишей Backspace удалить отступ до начала строки, а потом восстановить отступы клавишей Tab. Код совсем без отступов - моветон, его очень сложно читать. Возможно, в короткой программе (до 10 строк) совсем без отступов - это не так страшно, но лучше не привыкать.

И процедуру io_param зачем удалили-то? Я же сказал - новая редакция mainRun. Т.е. заменяем одну процедуру mainRun, остальные не трогаем. Т.е. надо было заменить содержимое только фрагмента между строкой Sub mainRun() и ближайшей ниже следующей строкой End Sub.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
не получается запустить

Ну, ёлки зелёные... Мы же проходили уже эту ситуацию борьбы с красными строками в редакторе кода после вставки несколько дней назад здесь. Напомню: надо удалить в красных строках (а может и не только в них) начальные отступы, т.е. клавишей Backspace удалить отступ до начала строки, а потом восстановить отступы клавишей Tab. Код совсем без отступов - моветон, его очень сложно читать. Возможно, в короткой программе (до 10 строк) совсем без отступов - это не так страшно, но лучше не привыкать.

И процедуру io_param зачем удалили-то? Я же сказал - новая редакция mainRun. Т.е. заменяем одну процедуру mainRun, остальные не трогаем. Т.е. надо было заменить содержимое только фрагмента между строкой Sub mainRun() и ближайшей ниже следующей строкой End Sub.

Автор - Gustav
Дата добавления - 24.12.2022 в 18:10
stalber Дата: Суббота, 24.12.2022, 22:15 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 347
Репутация: 7 ±
Замечаний: 40% ±

Excel 2007
Извиняюсь за тупость свою :-)

Всё заработало))
К сообщению приложен файл: voprosik8112.xlsb(18.3 Kb)


Сообщение отредактировал stalber - Суббота, 24.12.2022, 22:18
 
Ответить
СообщениеИзвиняюсь за тупость свою :-)

Всё заработало))

Автор - stalber
Дата добавления - 24.12.2022 в 22:15
Мир MS Excel » Вопросы и решения » Вопросы по VBA » По кругу выполнить код. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2023 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!