Здравствуйте! Столкнулся со следующей проблемой. Есть два файла: А и В. Файл А открывает файл В. В файле В автоматически выполняется макрос, который завершается командой Application.Run, ссылающейся на другой макрос в файле А. Он, в частности, определяет, какой еще, помимо файла А, открыт и закрывает его. До этого момента все работает. Далее должен произойти переход к еще одному макросу файла А по команде Call, но команда не выполняется. Я не могу понять, в чем загвоздка. Файлы во вложении. Папку «Не работает Call» необходимо поместить на диск С. Большое спасибо!
Здравствуйте! Столкнулся со следующей проблемой. Есть два файла: А и В. Файл А открывает файл В. В файле В автоматически выполняется макрос, который завершается командой Application.Run, ссылающейся на другой макрос в файле А. Он, в частности, определяет, какой еще, помимо файла А, открыт и закрывает его. До этого момента все работает. Далее должен произойти переход к еще одному макросу файла А по команде Call, но команда не выполняется. Я не могу понять, в чем загвоздка. Файлы во вложении. Папку «Не работает Call» необходимо поместить на диск С. Большое спасибо!Geografglobuspropil
Geografglobuspropil, здравствуйте. Можно узнать, почему так необходимо использовать метод Call? В примере Сергея, в макросе при открытии файла А можно заменить Завершение на Call Завершение [vba]
Код
Private Sub Workbook_Open() MsgBox ("Начинается выполнение макроса") Application.Workbooks.Open ("C:\Не работает Call\B.xlsm") ActiveWorkbook.Worksheets("Лист2").Range("a1") = ActiveWorkbook.Name Call Завершение End Sub
[/vba]не пойдет?
Geografglobuspropil, здравствуйте. Можно узнать, почему так необходимо использовать метод Call? В примере Сергея, в макросе при открытии файла А можно заменить Завершение на Call Завершение [vba]
Код
Private Sub Workbook_Open() MsgBox ("Начинается выполнение макроса") Application.Workbooks.Open ("C:\Не работает Call\B.xlsm") ActiveWorkbook.Worksheets("Лист2").Range("a1") = ActiveWorkbook.Name Call Завершение End Sub
Не работает по причине принципиально построенного алгоритма. Код вызывается из В, и, соответственно, при ее закрытии прекращает выполняться. С такими изменениями код закроет книгу А, но вернется в исходную процедуру, а книга А уже закрыта. [vba]
Код
Sub Завершение() Da = MsgBox("Сейчас закроется файл B и должен закрыться файл А, но проблема в том, что это не происходит", vbOKOnly, "Этап 3") If Da = vbOK Then Dim book As String book = ThisWorkbook.Sheets("Лист2").Range("a1") Workbooks(book).Save Call Выход Workbooks(book).Close False End If End Sub
[/vba]
Не работает по причине принципиально построенного алгоритма. Код вызывается из В, и, соответственно, при ее закрытии прекращает выполняться. С такими изменениями код закроет книгу А, но вернется в исходную процедуру, а книга А уже закрыта. [vba]
Код
Sub Завершение() Da = MsgBox("Сейчас закроется файл B и должен закрыться файл А, но проблема в том, что это не происходит", vbOKOnly, "Этап 3") If Da = vbOK Then Dim book As String book = ThisWorkbook.Sheets("Лист2").Range("a1") Workbooks(book).Save Call Выход Workbooks(book).Close False End If End Sub
Задача состоит в том, чтобы один файл открыл другой. Во втором файле при открытии по методу Workbook_Open выполнились свои макросы (там вызываются MsgBox-окна, в которые я ввожу значения). Потом этот файл закрылся, после чего в первом файле должно начаться выполнение следующих макросов. В заключении мне необходимо выполнить Call Выход, в котором прописано, как закрыть этот файл (сохранить и закрыть или вызвать следующее окно). Непонятно, почему не выполняется переход от макроса "Завершение" к макросу "Выход". А вообще цель такая, чтобы работать в файлах без использования мыши: чтобы выполнение макроса началось при открытии первого файла, а дальше осуществлялся переход от одного макроса к другому. И так, пока не закончится вся цепочка.
Задача состоит в том, чтобы один файл открыл другой. Во втором файле при открытии по методу Workbook_Open выполнились свои макросы (там вызываются MsgBox-окна, в которые я ввожу значения). Потом этот файл закрылся, после чего в первом файле должно начаться выполнение следующих макросов. В заключении мне необходимо выполнить Call Выход, в котором прописано, как закрыть этот файл (сохранить и закрыть или вызвать следующее окно). Непонятно, почему не выполняется переход от макроса "Завершение" к макросу "Выход". А вообще цель такая, чтобы работать в файлах без использования мыши: чтобы выполнение макроса началось при открытии первого файла, а дальше осуществлялся переход от одного макроса к другому. И так, пока не закончится вся цепочка.Geografglobuspropil
Я рассуждал так: если макрос 1 вызывает макрос 2, то действие макроса 1 завершается в тот момент, когда начинается действие макроса 2. По-вашему, как я понял, макрос 1 выполняется и тогда, когда уже начал выполняться вызванный им макрос 2. Из этого следует, что книгу с макросом 1 нельзя закрывать до тех пор, пока не выполнится макрос 2. Примерно так?
Я рассуждал так: если макрос 1 вызывает макрос 2, то действие макроса 1 завершается в тот момент, когда начинается действие макроса 2. По-вашему, как я понял, макрос 1 выполняется и тогда, когда уже начал выполняться вызванный им макрос 2. Из этого следует, что книгу с макросом 1 нельзя закрывать до тех пор, пока не выполнится макрос 2. Примерно так?Geografglobuspropil
Можно ли как-то разорвать эту связь: макрос 1 в книге А вызвал макрос 2 в книге В, на этом мы про макрос 1 забыли. Макрос 2 в книге В вызывает макрос 3 в книге С, на этом связь с макросом 2 прерывается. И так далее. Как переходить от одной книги к другой, закрывая предыдущую? Извините за назойливость!
Можно ли как-то разорвать эту связь: макрос 1 в книге А вызвал макрос 2 в книге В, на этом мы про макрос 1 забыли. Макрос 2 в книге В вызывает макрос 3 в книге С, на этом связь с макросом 2 прерывается. И так далее. Как переходить от одной книги к другой, закрывая предыдущую? Извините за назойливость!Geografglobuspropil
Запускать VBS скрипт, а не макрос в Excel. Либо сделать нормальный алгоритм. На какой требуется запуск макроса из книги В? Запускайте из А, и проблем не будет.
[vba]
Код
Set wb = Workbooks.Open("C:\Не работает Call\B.xlsm") If Not wb Is Nothing then Call Что_Нужно
[/vba]
Запускать VBS скрипт, а не макрос в Excel. Либо сделать нормальный алгоритм. На какой требуется запуск макроса из книги В? Запускайте из А, и проблем не будет.
[vba]
Код
Set wb = Workbooks.Open("C:\Не работает Call\B.xlsm") If Not wb Is Nothing then Call Что_Нужно