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

Вход

Регистрация

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

 

= Мир MS Excel/Запуск макроса из другой книги - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запуск макроса из другой книги (Макросы/Sub)
Запуск макроса из другой книги
fairylive Дата: Среда, 13.07.2016, 17:08 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
Полдня никак не могу победить проблему.
Есть макрос (назовём его макрос1) в книге1, который в какой-то момент должен открыть файл книга2 и вызвать в нём другой макрос (макрос2).
Файл открывается. В него запихиваются нужные значение. Затем должен выполниться макрос2.
[vba]
Код
Call Application.Run("книга2.xls!макрос2")
[/vba]
Макрос2 находится в модуле. Процедур в этом модуле хренова куча и других модулей в файле книга2 тоже. Но макрос2 запускает сначала процедуру которую я назначил Public.
Тем не менее высвечивается ошибка Run-Time erroor '1004': Не удаётся выполнить макрос "Книга2.xls!макрос2". Возможно, этот макрос отсутствует в текущей книге либо все макросы отключены.
 
Ответить
СообщениеПолдня никак не могу победить проблему.
Есть макрос (назовём его макрос1) в книге1, который в какой-то момент должен открыть файл книга2 и вызвать в нём другой макрос (макрос2).
Файл открывается. В него запихиваются нужные значение. Затем должен выполниться макрос2.
[vba]
Код
Call Application.Run("книга2.xls!макрос2")
[/vba]
Макрос2 находится в модуле. Процедур в этом модуле хренова куча и других модулей в файле книга2 тоже. Но макрос2 запускает сначала процедуру которую я назначил Public.
Тем не менее высвечивается ошибка Run-Time erroor '1004': Не удаётся выполнить макрос "Книга2.xls!макрос2". Возможно, этот макрос отсутствует в текущей книге либо все макросы отключены.

Автор - fairylive
Дата добавления - 13.07.2016 в 17:08
_Boroda_ Дата: Среда, 13.07.2016, 17:18 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А так?
[vba]
Код
Sub Макрос1()
    Application.Run ("Книга111.xlsm!Module1.tt")
End Sub
[/vba]
и так
[vba]
Код
Call Application.Run("Книга111.xlsm!Module1.tt")
[/vba]
и так
[vba]
Код
Run("Книга111.xlsm!Module1.tt")
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА так?
[vba]
Код
Sub Макрос1()
    Application.Run ("Книга111.xlsm!Module1.tt")
End Sub
[/vba]
и так
[vba]
Код
Call Application.Run("Книга111.xlsm!Module1.tt")
[/vba]
и так
[vba]
Код
Run("Книга111.xlsm!Module1.tt")
[/vba]

Автор - _Boroda_
Дата добавления - 13.07.2016 в 17:18
fairylive Дата: Среда, 13.07.2016, 17:34 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, Сдвинулся с мёртвой точки так:
[vba]
Код
Call Application.Run(макрос2)
[/vba]
Сработало видимо потому что файл книга2 уже открыт.

Но теперь другая проблема. Этот макрос2 не отрабатывает как надо. Хотя если нажимать кнопку на котором висит этот макрос то файл обрабатывается с теми новыми данными из файла книга1.

Расширение файла книга2 XLS это старый файл экселя с макросами.


Сообщение отредактировал fairylive - Среда, 13.07.2016, 17:34
 
Ответить
Сообщение_Boroda_, Сдвинулся с мёртвой точки так:
[vba]
Код
Call Application.Run(макрос2)
[/vba]
Сработало видимо потому что файл книга2 уже открыт.

Но теперь другая проблема. Этот макрос2 не отрабатывает как надо. Хотя если нажимать кнопку на котором висит этот макрос то файл обрабатывается с теми новыми данными из файла книга1.

Расширение файла книга2 XLS это старый файл экселя с макросами.

Автор - fairylive
Дата добавления - 13.07.2016 в 17:34
_Boroda_ Дата: Среда, 13.07.2016, 17:55 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Сдвинулся с мёртвой точки так:

Неправильно сдвинулись. Макросов "макрос2" может быть много - в разных книгах и даже в разных модулях одной книги. Нужно указывать книгу и модуль.
Кстати, у Вас в текущей книге случайно нет ли макроса с именем "макрос2"?
И еще - гнетут меня смутные сомнения, что в том макросе "макрос2", который нужен, на прописана книга, в которой тот должен работать (типа имя книги, ThisWorkbook или ActiveWorkbook). Возможно, лист тоже не прописан. Тогда макрос будет отрабатывать на текущем листе текущей книги, а не там, где Вам нужно


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Сдвинулся с мёртвой точки так:

Неправильно сдвинулись. Макросов "макрос2" может быть много - в разных книгах и даже в разных модулях одной книги. Нужно указывать книгу и модуль.
Кстати, у Вас в текущей книге случайно нет ли макроса с именем "макрос2"?
И еще - гнетут меня смутные сомнения, что в том макросе "макрос2", который нужен, на прописана книга, в которой тот должен работать (типа имя книги, ThisWorkbook или ActiveWorkbook). Возможно, лист тоже не прописан. Тогда макрос будет отрабатывать на текущем листе текущей книги, а не там, где Вам нужно

Автор - _Boroda_
Дата добавления - 13.07.2016 в 17:55
fairylive Дата: Среда, 13.07.2016, 18:29 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
Макрос2 имеет уникальное имя. Повториться не может. Это я его здесь на форуме так обозвал для наглядности. Вообще он в той книге Книга2 имеет имя на русском языке. Может дело в этом?

По поводу активации и thisbook. Вот так это выглядит в моём макросе Макрос1(имя тоже другое уникальное)

[vba]
Код
With Workbooks("книга2.xls").Worksheets("лист3")
    .Activate
    Call Application.Run(макрос2)
    Application.Wait Time:=Now + TimeSerial(0, 0, 1)
    End With
[/vba]

UPD. Подправил Книга1 на Книга2.


Сообщение отредактировал fairylive - Среда, 13.07.2016, 21:03
 
Ответить
СообщениеМакрос2 имеет уникальное имя. Повториться не может. Это я его здесь на форуме так обозвал для наглядности. Вообще он в той книге Книга2 имеет имя на русском языке. Может дело в этом?

По поводу активации и thisbook. Вот так это выглядит в моём макросе Макрос1(имя тоже другое уникальное)

[vba]
Код
With Workbooks("книга2.xls").Worksheets("лист3")
    .Activate
    Call Application.Run(макрос2)
    Application.Wait Time:=Now + TimeSerial(0, 0, 1)
    End With
[/vba]

UPD. Подправил Книга1 на Книга2.

Автор - fairylive
Дата добавления - 13.07.2016 в 18:29
_Boroda_ Дата: Среда, 13.07.2016, 19:41 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Причем здесь Ваш макрос1? Я про Макрос 2 Вам говорю
в том макросе "макрос2", который нужен

И вообще - давайте не будем без кода макроса в угадайку играть?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПричем здесь Ваш макрос1? Я про Макрос 2 Вам говорю
в том макросе "макрос2", который нужен

И вообще - давайте не будем без кода макроса в угадайку играть?

Автор - _Boroda_
Дата добавления - 13.07.2016 в 19:41
RAN Дата: Среда, 13.07.2016, 20:16 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
И вообще - давайте не будем без кода макроса в угадайку играть?

Незачем было и начинать. B)


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
И вообще - давайте не будем без кода макроса в угадайку играть?

Незачем было и начинать. B)

Автор - RAN
Дата добавления - 13.07.2016 в 20:16
fairylive Дата: Среда, 13.07.2016, 21:02 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
Тот файл Книга2 написан не мой. Кода там несколько сотен страниц. Вникать как там что устроено нет ни возможности ни желания. Думаю что ни вам ни мне. Но он работает и это главное. Единственное что написан он очень давно. Когда ещё не было расширений XLSM. Сохранён он в формате XLS. И только в таком виде он может существовать. При попытке сохранить в другом формате (xlsm) макрос перестаёт работать.

Мне надо просто открывать этот файл, запихивать туда данные и запускать макрос на обработку этих данных. С первыми двумя пунктами проблем нет. А вот макрос почему-то не подцепляется.

Коды пока выложить не могу. Мой который я пишу ещё очень сыроват.
 
Ответить
СообщениеТот файл Книга2 написан не мой. Кода там несколько сотен страниц. Вникать как там что устроено нет ни возможности ни желания. Думаю что ни вам ни мне. Но он работает и это главное. Единственное что написан он очень давно. Когда ещё не было расширений XLSM. Сохранён он в формате XLS. И только в таком виде он может существовать. При попытке сохранить в другом формате (xlsm) макрос перестаёт работать.

Мне надо просто открывать этот файл, запихивать туда данные и запускать макрос на обработку этих данных. С первыми двумя пунктами проблем нет. А вот макрос почему-то не подцепляется.

Коды пока выложить не могу. Мой который я пишу ещё очень сыроват.

Автор - fairylive
Дата добавления - 13.07.2016 в 21:02
Manyasha Дата: Среда, 13.07.2016, 21:22 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
макрос почему-то не подцепляется
у меня работают все предложенные Александром варианты. Да и Ваш тоже работает.
Не работает, если в имени файла есть пробелы, тогда нужно так:
[vba]
Код
Application.Run "'123 1.xls'!макрос2"  'с апострофами
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение
макрос почему-то не подцепляется
у меня работают все предложенные Александром варианты. Да и Ваш тоже работает.
Не работает, если в имени файла есть пробелы, тогда нужно так:
[vba]
Код
Application.Run "'123 1.xls'!макрос2"  'с апострофами
[/vba]

Автор - Manyasha
Дата добавления - 13.07.2016 в 21:22
fairylive Дата: Среда, 13.07.2016, 21:35 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
Manyasha, так вот зачем эти апострофы))) Но всё же нет. Имя файла в одно слово.
Я в предыдущем сообщении возможно не верно выразился на счет того что макрос не подцепляется. По началу было сообщение с ошибкой что макрос не удаётся выполнить или найти. Потом это сообщение пропало и вроде бы как макрос запускается. На это указывает тот момент что в экселе в файле книга2 меняется лист (он менялся как раз после выполнения макроса2). Но лист пустой. Нет результата сейчас.
 
Ответить
СообщениеManyasha, так вот зачем эти апострофы))) Но всё же нет. Имя файла в одно слово.
Я в предыдущем сообщении возможно не верно выразился на счет того что макрос не подцепляется. По началу было сообщение с ошибкой что макрос не удаётся выполнить или найти. Потом это сообщение пропало и вроде бы как макрос запускается. На это указывает тот момент что в экселе в файле книга2 меняется лист (он менялся как раз после выполнения макроса2). Но лист пустой. Нет результата сейчас.

Автор - fairylive
Дата добавления - 13.07.2016 в 21:35
RAN Дата: Среда, 13.07.2016, 21:44 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Элементарная проверка
[vba]
Код
Sub Макрос2()
    msgbox "макрос2 запущен"
...............
    msgbox "макрос2 отработал"
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЭлементарная проверка
[vba]
Код
Sub Макрос2()
    msgbox "макрос2 запущен"
...............
    msgbox "макрос2 отработал"
End Sub
[/vba]

Автор - RAN
Дата добавления - 13.07.2016 в 21:44
fairylive Дата: Среда, 13.07.2016, 22:24 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
Вот файлы с кодами. Проблема таже что была и в первом сообщении. Макрос не запускается или не находится. Ниже мой код из файла подцеп раскроя:
[vba]
Код
Sub podcep()

Dim a As Double
Dim b As Double
Dim raskroy_bk As Workbook
Dim pathfile As String

pathfile = ThisWorkbook.Path & "\"

a = 890
b = 130

Set raskroy_bk = Workbooks.Open(pathfile & "раскрой.xls")

With Workbooks("раскрой.xls").Worksheets("Разблюдовка")
.Activate
.Range("C4").Value = a
.Range("D4").Value = b

Call Application.Run("'раскрой.xls'!АвтоРаскрой")

End With

End Sub
[/vba]

Ссылка на второй файл в облаке https://cloud.mail.ru/public/8BZd/6GKqNwDPa

PS файлы надо распаковать в одну папку.
К сообщению приложен файл: 0145117.xlsm (16.1 Kb)


Сообщение отредактировал fairylive - Среда, 13.07.2016, 22:28
 
Ответить
СообщениеВот файлы с кодами. Проблема таже что была и в первом сообщении. Макрос не запускается или не находится. Ниже мой код из файла подцеп раскроя:
[vba]
Код
Sub podcep()

Dim a As Double
Dim b As Double
Dim raskroy_bk As Workbook
Dim pathfile As String

pathfile = ThisWorkbook.Path & "\"

a = 890
b = 130

Set raskroy_bk = Workbooks.Open(pathfile & "раскрой.xls")

With Workbooks("раскрой.xls").Worksheets("Разблюдовка")
.Activate
.Range("C4").Value = a
.Range("D4").Value = b

Call Application.Run("'раскрой.xls'!АвтоРаскрой")

End With

End Sub
[/vba]

Ссылка на второй файл в облаке https://cloud.mail.ru/public/8BZd/6GKqNwDPa

PS файлы надо распаковать в одну папку.

Автор - fairylive
Дата добавления - 13.07.2016 в 22:24
RAN Дата: Среда, 13.07.2016, 23:05 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Call Application.Run("'раскрой.xls'!АвтоРаскрой.АвтоРаскрой")
[/vba]
Запудрили бедному VBA мозги, он и чешет репу, что ему искать, то-ли модуль, то-ли процедуру. ;)


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Call Application.Run("'раскрой.xls'!АвтоРаскрой.АвтоРаскрой")
[/vba]
Запудрили бедному VBA мозги, он и чешет репу, что ему искать, то-ли модуль, то-ли процедуру. ;)

Автор - RAN
Дата добавления - 13.07.2016 в 23:05
fairylive Дата: Четверг, 14.07.2016, 13:27 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
RAN, спасибо! Всё заработало. Я думал над тем что надо указать имя модуля. Но оно совпадало с именем процедуры...
 
Ответить
СообщениеRAN, спасибо! Всё заработало. Я думал над тем что надо указать имя модуля. Но оно совпадало с именем процедуры...

Автор - fairylive
Дата добавления - 14.07.2016 в 13:27
_Boroda_ Дата: Четверг, 14.07.2016, 14:03 | Сообщение № 15
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Я думал над тем что надо указать имя модуля

Не, ну нормально? Я Вам разве не об этом с самого начала писал? Во втором посте кодом
Application.Run ("Книга111.xlsm!Module1.tt")

В четвертом посте словами
Нужно указывать книгу и модуль


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Я думал над тем что надо указать имя модуля

Не, ну нормально? Я Вам разве не об этом с самого начала писал? Во втором посте кодом
Application.Run ("Книга111.xlsm!Module1.tt")

В четвертом посте словами
Нужно указывать книгу и модуль

Автор - _Boroda_
Дата добавления - 14.07.2016 в 14:03
fairylive Дата: Четверг, 14.07.2016, 17:21 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, виноват-с, невнимательность моя. Теперь вижу что tt это имя процедуры в модуле module1. До этого думал может это какое-то расширение модуля внутри файла xlsx...
 
Ответить
Сообщение_Boroda_, виноват-с, невнимательность моя. Теперь вижу что tt это имя процедуры в модуле module1. До этого думал может это какое-то расширение модуля внутри файла xlsx...

Автор - fairylive
Дата добавления - 14.07.2016 в 17:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запуск макроса из другой книги (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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