Страницы: 1
RSS
[ Закрыто ] Прекращение работы при запуске макроса из другого файла
 
Всем привет !
Столкнулся с такой проблемой. Во время работы макроса пользователь указывает файл excel, который с помощью макроса редактируется к требуемому виду.(заполняются поля по указанным пользователем данным - номер контракта, числа и прочее)
Затем отредактированный документ сохраняется и закрывается, форма прячется и далее :
1) Макрос заканчивается работу - Форма анлодится, конец программы.
2) если пользователь указал необходимость дополнительных действий, то открывается ещё один файл с макросами(назовём его ФАЙЛ2) и через applicationRUN запускается макрос в этом файле, в зависимости от макроса вызывается какая-либо форма( несколько вариантов). В формы подтягиваются значение из предыдущего макроса(я их записываю на лист ФАЙЛа2 при открытии), путь к созданному(и сохраненному и закрытому)  макросом один файлу. Остаётся нажать на кнопку "выполнить" и..
Тут возникли проблемы:
а) Не работает дебаг при вызове макроса из открытого ФАЙЛ2. Я нуб, но..почему?какое-то свойство excel/? и есть ли способ как избежать этого? Обошёлся везде понатыкаными msgBox и нашёл строку где происходит выход.
б) Выход происходит в строке workbooks.open(путь к созданному файлу). Причём сразу же после вылета( я так это называю - мы просто оказываемся на первом листе ФАЙЛ2 с кнопками вызова форм), если так же вызывать форму(подтянутые значения то остаются) -- всё работает как надо!
Может быть кто-то сталкивался с а) или б) подскажите.
Файлов примеров нет, пишу из дома, в понедельник смог бы предоставить код, но мне кажется дело не в нём а в моём знании работы VBA- запуске макросов из других файлов. Всё-таки по каким-то причинам код работает отлично, но не при запуске со стороны..
 
Может найдутся у кого-нибудь подсказки ?
 
Цитата
dimdim17 написал:
бошёлся везде понатыкаными msgBox
Про
Код
Stop
Вам известно?
PHP Битрикс24 REST API, Google Apps Script, Excel VBA Windows Mac
 
Цитата
Inexsu написал:
Про Stop Вам известно?
Добрый день! Известно. Но, как я писал в своём вопросе, при вызове макроса из открытого файла все STOP-ы и дебаг перестают работать. В ближайшее время выложу код - сделал тестовый пример по-быстрому. Всё повторяется в точности как и на моих рабочих файлах. Видимо, что-то я делаю не так :)
 
Добрый день !
Прикладываю файлы. Это не рабочие, но ошибка повторяется так же и на тестовом варианте. Помогите разобраться.

Содержимое архива:
Файл Запускной - основной файл с которого начинается работа.
После запуска в форме прикладываем Файл для Открытия - типа рабочи файл. Он сохраняется под своим именем, + _обработан и запускается Файл запускной2., который должен продолжить работу.
Форма вызывается, путь к созданному файлу прописан, но на строчке openfile - всё закрывается.
Если после этого тут же , в уже открытом запускной2 нажать на кнопку, то форма появится и нормально отработает всё.
Изменено: dimdim17 - 28.10.2017 11:35:21
 
Всё ещё нужна помощь :)
 
Не очень понятно, в чем проблема.
Цитата
Форма вызывается, путь к созданному файлу прописан, но на строчке openfile - всё закрывается.
После запуска запускной2 что делать, а то у Вас две формы запускаются последовательно и кнопка еще запуск кнопка 2. Какова последовательность нажатия кнопок  по каким формам?
Изменено: skais675 - 30.10.2017 10:50:51
 
Skais675,
Последовательность такая:
Включаем "Запускной". Нашимаем кнопку.
Появляется форма в которой мы указываем "Файл для открытия". Далее в файле для открытия каждому значению прибавляют +1 и сохраняют его как "Файл для открытия_обработан".
Далее открывается книга "Запускной2", в ячейку 1-го листа которой записывается путь к файлу "***_обработан". Этот файл автоматически загружается в форму --- Жмём "пуск" и.. далее должен открыться этот файл и сработать STOP после оператора открытия. Но ничего этого не происходит, я не могу понять почему.
Программа не выполняется и мы просто оказываемся с открытым файлом "Запускной2". Если при этом вызвать форму и проделать то же самое то и файл откроется и STOP сработает.
 
Всем привет!
 
Вверх =)
 
Привет!
"точки останова очень полезны при отладке событийных процедур(вроде Worksheet_Change, Worksheet_BeforeDoubleClick, событий элементов форм и т.п.), т.к. они в большинстве своем содержат аргументы и выполнить по F8 их просто невозможно и выполняются они только при наступлении самого события, которые они призваны обработать.
Чтобы дать понять VBA на какой строке необходимо будет остановится необходимо установить курсор мыши в любое место нужной строки и нажать F9 или Debug-Toggle Breakpoint"  http://www.excel-vba.ru/chto-umeet-excel/otlov-oshibok-i-otladka-koda-vba/
PHP Битрикс24 REST API, Google Apps Script, Excel VBA Windows Mac
 
Уважаемый dimdim17, уверен, что Вы разберетесь самостоятельно и в посторонней помощи нет необходимости. Проще всего дополнить (временно) свой код "трассировочными" сообщениями. Например, в процедуре Start модуля StartModule файла "Файл Запускной 2" перед TestForm2.Show добавьте строку:
Код
MsgBox "Мы в процедуре Start книги Запускной 2"

и далее по ключевым точкам маршрута, который Вы хотите пройти.
Кроме того, конструкция
Код
Application.DisplayAlerts = False

очень опасна (прочитайте про нее) и ее следует применять только в редких случаях. Подозреваю, что Вам она понадобилась для отключения предупреждения при сохранении файла. Если так, то сразу после сохранения установите это свойство в True.

Успехов!
Изменено: sokol92 - 05.11.2017 21:13:48
Владимир
 
Спасибо, но я писал в первом посте:
Цитата
Обошёлся везде понатыкаными msgBox и нашёл строку где происходит выход.
Вылет на workbooks.open
Displayalerts отключал - ничего не меняется в моей проблеме.
 
Конструкция

Application.Run "'Файл Запускной2.xlsm'!StartModule2.start()"

выглядит подозрительно.

Попробуйте переименовать файл "Файл запускной2.xlsm", убрав пробел,  и указанную строку заменить на:

Application.Run NewWB.Name & "!Start"

У меня все после этого работает.
Изменено: sokol92 - 04.11.2017 18:00:25
Владимир
 
Цитата
sokol92 написал:
Конструкция

Application.Run "'Файл Запускной2.xlsm'!StartModule2.start()"

выглядит подозрительно.

Попробуйте переименовать файл "Файл запускной2.xlsm", убрав пробел,  и указанную строку заменить на:

Application.Run NewWB.Name & "!Start"

У меня все после этого работает.
Спасибо огромное ! Действительно в этом было дело.
А почему так? В принципе же при моём изначальном варианте всё запускалось и форма вызывалась, но увы. А при вашем варианте всё отлично..
Я в замешаетльстве, возможно в литературе потом найду ответ, но вдруг найдётся кто обьяснит здесь и сейчас)
 
Метод Run, несмотря на короткое название, не так прост :) . Но за объяснениями -  к корифеям форума...

Результат эксперимента. Если в исходном файле в строке

Application.Run "'Файл Запускной2.xlsm'!StartModule2.start()"

убрать круглые скобки в конце, то, кажется, также  работает. Уже легче!

А со скобками, действительно, ситуация непонятная (для меня). Процедура Start второго "запускного" файла вызывается (почему-то, вместо одного) два раза и очень странным образом... Скажем, Msgbox отрабатывает, а Stop - нет.
Изменено: sokol92 - 04.11.2017 19:53:43
Владимир
 
Цитата
sokol92 написал:
Результат эксперимента. Если в исходном файле в строке

Application.Run "'Файл Запускной2.xlsm'!StartModule2.start()"

убрать круглые скобки в конце, то, кажется, также  работает. Уже легче!

А со скобками, действительно, ситуация непонятная (для меня). Процедура Start второго "запускного" файла вызывается (почему-то, вместо одного) два раза и очень странным образом... Скажем, Msgbox отрабатывает, а Stop - нет.
Да, действительно. Я не понимаю почему так и в поиске не смог найти, возможно кто-то знает.
Спасибо вам ещё раз.
 
dimdim17, Вы можете обойтись без бездумного цитирования? Кнопка цитирования не для ответа! Вернитесь в свои сообщения и удалите лишнее.
 
А вы не хамите)
 
sokol92, строки кода нужно не цветом выделять, кнопка для оформления кода <...>
Страницы: 1
Читают тему
Наверх