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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 17:05   #1
AesmaDiv
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 19
По умолчанию Прекращение выполнения макроса

Имеется код:
Sub Второстепеный(параметр)
Dim index
...
If index=15 then
Exit Sub
End if
...
End Sub

Sub Основной()
...
Call Второстепенный(параметр)
...
End Sub

Согласно коду при index=15 прекращается дальнейшее выполнение макроса Второстепенный(), а мне нужно чтоб прекращалось выполнение макроса Основной(). То есть мне нужно прекратить выполнение программы, если в подпрограмме достигается какое-то условие. Подскажите пожалуйста.
AesmaDiv вне форума Ответить с цитированием
Старый 12.12.2010, 17:13   #2
Fierce
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 29
По умолчанию

Можно обьявить переменную index в Sub Основной и передать ее во второстепенный. А в основном поставить условие
Fierce вне форума Ответить с цитированием
Старый 12.12.2010, 17:28   #3
AesmaDiv
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 19
По умолчанию

Такой вариант не подходит. Дело в том, что условие прекращение макроса основывается на переменой, объявленной и изменяемой в подпрограмме Второстепенный(). Код может содержать большое кол-во подпрограмм...второстепенных и третьестепенных. И вот при достижении какого-то условия, допустим в третьестепенной подпрограмме необходимо не просто выйти из подпрограммы, а прекратить выполнение макроса вообще. Exit Sub прекращает выполнение Sub'а в котором он вызван. А вот есть ли такой Exit который остановит выполнение модуля, вне зависимости откуда он был вызван?
AesmaDiv вне форума Ответить с цитированием
Старый 12.12.2010, 17:37   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Function Второстепеный(параметр) as boolean
Dim index
Второстепеный = False
...
If index=15 then
Exit Sub
End if
...
Второстепеный = True
End Function

Sub Основной()
...
if not Второстепенный(параметр) then Exit Sub
...
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 12.12.2010, 17:49   #5
AesmaDiv
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 19
По умолчанию

Хмм..только так, да? То есть такой команды нет и приходится выдумывать способы реализовать через Exit Sub. Плохо. Я думал что есть что-то вроде Quit. Жаль.
В любом случае спасибо.

Кстати, IgorGO у вас ошибка кажися. Я так понимаю вы имели ввиду следующее:

Function Второстепеный(параметр) as boolean
Dim index
Второстепеный = False
...
If index=15 then
Второстепеный = True
End if
...
End Function

Но такой вариант всё равно мну не устраивает. У меня в модуле очень много подпрограмм и в большей части нужно реализовать условие выхода из программы. Плюс многие подпрограммы работают с листами и ячейками, а Function это делать не хочет.

Последний раз редактировалось AesmaDiv; 12.12.2010 в 17:55.
AesmaDiv вне форума Ответить с цитированием
Старый 12.12.2010, 18:23   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

нет, я имел ввиду то, что написал.
Function Второстепеный(параметр) as boolean
Dim index
Второстепеный = False
...
If index=15 then
Exit Function
End if
...
Второстепеный = True
End Function
а было Exit Sub - вот это ошибка

обратили внимание, что в ОСНОВНОЙ:
if not Второстепенный(параметр) then Exit Sub
а не Call Второстепенный(параметр) как было у Вас
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 12.12.2010 в 18:32.
IgorGO вне форума Ответить с цитированием
Старый 12.12.2010, 18:30   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
подпрограммы работают с листами и ячейками, а Function это делать не хочет.
а у меня до этого сообщения работали, теперь наверное тоже не будут...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Время выполнения макроса... nikolai_P Microsoft Office Excel 9 03.04.2013 00:59
Прекращение выполнения функции через N-ое количество тактов AlterX Общие вопросы C/C++ 9 23.05.2010 17:33
Пауза выполнения макроса artclon Microsoft Office Excel 3 09.02.2010 05:13
Как сократить время выполнения макроса? Алексей11111 Microsoft Office Excel 11 01.12.2009 20:04
скрыть процесс выполнения макроса Iskin Microsoft Office Excel 1 21.11.2008 07:28