Страницы: 1
RSS
Выход и возврат в процедуру
 
Добрый вечер.
Разрабатывая макрос для своих коллег столкнулся с сообщение о том, что процедура слишком длинная.
Возможно ли на каком либо шаге выйти из макроса, выполнить другой, а потом вернуться именно в то место макроса 1 из которого вышло.
Т.е. схема логически выглядит так...

Макрос 1
Шаги 1...15
   Выход из макроса 1 => Вход в макрос 2
       Выполнение макроса 2
   Выход из макроса 2 => возврат к макросу 1
Шаги 16...
Конец макроса 1.

В ответ на вопрос почему не разделить его на два выполняющихся по очереди...
Уже есть большой кусок написанного кода с кучей циклами и переборами файлов их сохранениями и т.д. и соответственно не очень хочется лопать все опять...
Прошу помощи, соседи и коллеги
Использую VBA для решения рабочих вопросов. Чуть больше чем любитель, так что прошу прощение за глупые вопросы.
 
Добрый.
Это можно сделать при помощи Call
Например:
Код
Sub Main()
If i=1 then Call Macro1
Else Call Marcro2
end if
end sub

Sub Macro1
тут инструкции если истина....
End Sub

Sub Macro2
тут инструкции если ложь...
End Sub
Кому решение нужно - тот пример и рисует.
 
Код
Sub Main()
Call Macro1
Call Macro2
' и так далее
End sub
 
Sub Macro1
'продолжение....
End Sub
 
Sub Macro2
'продолжение....
End Sub
Обязательно возвращаться к первому макросу и продолжать?
Тогда нужно условие (задать маркер (заполненная ячейка ... )
добавится
Код
Sub Macro1
' If (условие - маркер) Then GoTo cont

'продолжение....
Call Macro2

cont:
'продолжение....
End Sub
Изменено: MonsterBeer - 03.03.2016 18:49:18
Когда я ем,я глух и нем, хитер и быстр, и дьявольски умен.
 
Цитата
Olegersohn написал:
столкнулся с сообщение о том, что процедура слишком длинная.
Если выйти из процедуры и снова войти в неё (если и получится) - длина самой процедуры останется неизменной :)
Так что нужно разбивать на куски и вызывать в нужный момент.
 
Вообще-то ребят, есть gosub...return 8)
Я сам - дурнее всякого примера! ...
 
Серж, тут ключевое
Цитата
сообщение о том, что процедура слишком длинная
Выход и возврат каким образом сократит процедуру? :-)
 
Юр, подпрограммы gosub размещаются снаружи, не в теле макроса. К тому же туда обычно помещаются однотипные действия для многократного обращения. Так что да, сократит.
Я сам - дурнее всякого примера! ...
 
Я про основную процедуру, которая изначально большая и в которой автор хочет сделать вход-выход )
Но я понял твою мысль.
 
А вообще надо смотреть, что там за макрос. Небось плод греховного соития юзверя с макрорекордером и после тщательной переработки останутся пара десятков строк :sceptic:
Я сам - дурнее всякого примера! ...
 
А в принципе советы верные:
Код
Макрос 1 
Шаги 1...15 
call Макрос2 
Шаги 16... 
Конец макроса 1. 
 
Цитата
KuklP написал:
Небось плод греховного соития юзверя с макрорекордером
На самом деле оно самое и есть, люди записывали миллион формул в разных ячейках, это то и размазало весь sub на кучу строк, если есть идеи как заменить сто строк вида...ячейка = формула...буду крайне признателен.
Пробую варианты Выше...
Сокращение как раз и хочу сделать тем, что запись маркорекордера (куча: ячейка=формула) вынести в отдельное место...
Использую VBA для решения рабочих вопросов. Чуть больше чем любитель, так что прошу прощение за глупые вопросы.
 
На Вашем месте я бы прошел все шаги работы с формулами и автоматизировал все через массивы и словари в vba. Если необходимы формулы то подставлять их только на последнем этапе.  
Страницы: 1
Читают тему
Наверх