Excel макрос запускающий другие книги

Запуск макроса из другой книги

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». Возможно, этот макрос отсутствует в текущей книге либо все макросы отключены.

 

Ответить

_Boroda_

Дата: Среда, 13.07.2016, 17:18 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
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

 

Ответить

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_

Дата: Среда, 13.07.2016, 17:55 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Сдвинулся с мёртвой точки так:

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


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

 

Ответить

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

 

Ответить

_Boroda_

Дата: Среда, 13.07.2016, 19:41 |
Сообщение № 6

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Причем здесь Ваш макрос1? Я про Макрос 2 Вам говорю

в том макросе «макрос2», который нужен

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


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

 

Ответить

RAN

Дата: Среда, 13.07.2016, 20:16 |
Сообщение № 7

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

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

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


Быть или не быть, вот в чем загвоздка!

 

Ответить

fairylive

Дата: Среда, 13.07.2016, 21:02 |
Сообщение № 8

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 122


Репутация:

4

±

Замечаний:
0% ±


Excel 2016

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

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

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

 

Ответить

Manyasha

Дата: Среда, 13.07.2016, 21:22 |
Сообщение № 9

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

макрос почему-то не подцепляется

у меня работают все предложенные Александром варианты. Да и Ваш тоже работает.
Не работает, если в имени файла есть пробелы, тогда нужно так:
[vba]

Код

Application.Run «‘123 1.xls’!макрос2»  ‘с апострофами

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

fairylive

Дата: Среда, 13.07.2016, 21:35 |
Сообщение № 10

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 122


Репутация:

4

±

Замечаний:
0% ±


Excel 2016

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

 

Ответить

RAN

Дата: Среда, 13.07.2016, 21:44 |
Сообщение № 11

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Элементарная проверка
[vba]

Код

Sub Макрос2()
    msgbox «макрос2 запущен»
……………
    msgbox «макрос2 отработал»
End Sub

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

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

 

Ответить

RAN

Дата: Среда, 13.07.2016, 23:05 |
Сообщение № 13

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

[vba]

Код

Call Application.Run(«‘раскрой.xls’!АвтоРаскрой.АвтоРаскрой»)

[/vba]
Запудрили бедному VBA мозги, он и чешет репу, что ему искать, то-ли модуль, то-ли процедуру. ;)


Быть или не быть, вот в чем загвоздка!

 

Ответить

fairylive

Дата: Четверг, 14.07.2016, 13:27 |
Сообщение № 14

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 122


Репутация:

4

±

Замечаний:
0% ±


Excel 2016

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

 

Ответить

_Boroda_

Дата: Четверг, 14.07.2016, 14:03 |
Сообщение № 15

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Я думал над тем что надо указать имя модуля

Не, ну нормально? Я Вам разве не об этом с самого начала писал? Во втором посте кодом

Application.Run («Книга111.xlsm!Module1.tt»)

В четвертом посте словами

Нужно указывать книгу и модуль


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

 

Ответить

fairylive

Дата: Четверг, 14.07.2016, 17:21 |
Сообщение № 16

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 122


Репутация:

4

±

Замечаний:
0% ±


Excel 2016

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

 

Ответить

0 / 0 / 0

Регистрация: 24.04.2018

Сообщений: 62

1

Как запускать макросы на одной книге — из другой книги

07.12.2018, 21:39. Показов 7096. Ответов 9


Студворк — интернет-сервис помощи студентам

Доброго вечера всем.

На листе3 книги 1.xls — стоят три кнопки — на них нацеплены три простых макроса.
Но вот если эти три кнопки — перенести на другую книгу 2.xls — то они уже работать не будут — хотя там вроде макросы ссылаются на книгу 1.xls.

Подскажите — как запускать эти три простые макроса — щелкая по кнопкам не в книге 1.xls, а в книге 2.xls ?
То есть при щелчке на кнопку — на листе книги 2.xls — выполнился бы макрос на листе книги 1.xls.



0



Остап Бонд

Заблокирован

07.12.2018, 22:10

2

Димитрий2, вот беда какая — Ваши три кнопки (с простыми макросами) не работают даже в книге 1.xls

?err.Description
Компонент с указанным именем не найден.
1004



0



0 / 0 / 0

Регистрация: 24.04.2018

Сообщений: 62

07.12.2018, 22:34

 [ТС]

3

Цитата
Сообщение от Остап Бонд
Посмотреть сообщение

вот беда какая — Ваши три кнопки (с простыми макросами) не работают даже в книге 1.xls

Только что скачал файл 1.xls и лично его проверил:
Три кнопки — все-таки работают в книге 1.xls, не выдавая никаких ошибок.
Проверял на Excel2013



0



Остап Бонд

Заблокирован

07.12.2018, 22:48

4

У меня работают только в таком варианте —

Вложения

Тип файла: xls 1.xls (53.0 Кб, 5 просмотров)



0



Остап Бонд

Заблокирован

07.12.2018, 23:09

5

И для размышлений — этот код (звиняйте, только для одной фигуры) работает для обоих книг

Visual Basic
1
2
3
4
5
6
Sub Макрос4()
With ThisWorkbook.ActiveSheet.Shapes("Арка 13")
  .IncrementLeft 11.25
  .IncrementTop -9.75
End With
End Sub

Но Вам видней, конечно, суть вашей проблемы.



0



0 / 0 / 0

Регистрация: 24.04.2018

Сообщений: 62

07.12.2018, 23:57

 [ТС]

6

Остап Бонд, я не совсем понимаю смысл этого кода.
Каким образом — он будет двигать арку — расположенную в другой книге ?
Фрагмент кода : ThisWorkbook.ActiveSheet. — означает, что макрос будет искать фигуру Арка — в текущей книге, на активном листе.

А я спрашивал — про передвижение фигуры — в другой книге.
Не в той же самой книге, из которой запускается макрос — а в другой книге.

То есть если нажимается кнопка в книге 2.xls — должен сработать макрос в книге 1.xls.
Вот о чем я спрашивал.



0



Святой НякаЛайк

653 / 246 / 88

Регистрация: 28.10.2015

Сообщений: 520

08.12.2018, 00:21

7

Лучший ответ Сообщение было отмечено Димитрий2 как решение

Решение

Если обе книги открыты

Visual Basic
1
2
3
Sub Макрос_в_другой_книге()
    Application.Run ("1.xls!Module1.Макрос5")
End Sub



1



Остап Бонд

Заблокирован

08.12.2018, 00:24

8

Димитрий2, разбирайтесь с тем, что вы хотели, но не сумели.
У меня вопросов по теме — 0!



0



0 / 0 / 0

Регистрация: 24.04.2018

Сообщений: 62

08.12.2018, 00:38

 [ТС]

9

Святой НякаЛайк, я понял вашу мысль.
Теперь все работает как надо.
Спасибо.



0



653 / 246 / 88

Регистрация: 28.10.2015

Сообщений: 520

08.12.2018, 00:41

10



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

08.12.2018, 00:41

10

Вызов процедур Sub (подпрограмм) из кода других процедур, расположенных в одном или разных модулях, в одной или разных книгах Excel (проектах VBA), с аргументами или без. Примеры.

Вызов подпрограммы из кода другой процедуры Sub, расположенной в том же модуле или другом модуле одной рабочей книги (проекта VBA) осуществляется с помощью ключевого слова Call или без него по имени подпрограммы. Вызывающая процедура Sub может быть любой видимости, как Public, так и Private, а вызываемая, если расположена в том же модуле, может быть любой видимости, но если расположена в другом модуле, должна быть объявлена как Public.

Синтаксис вызова подпрограмм в пределах одной книги

[ Call ] ИмяПроцедуры [ (Аргументы) ]

  • Call — необязательное ключевое слово;
  • ИмяПроцедуры — обязательный компонент, имя вызываемой подпрограммы;
  • Аргументы — необязательный компонент, список аргументов вызываемой процедуры Sub, разделенных запятой.

Вызов подпрограмм без аргументов в пределах одного модуля

Скобки рядом с именами вызываемых подпрограмм без аргументов не ставятся:

Private Sub test1()

  Call test2

  test3

End Sub

Private Sub test2()

  MsgBox «Процедура test2 (Private) вызвана с ключевым словом Call!»

End Sub

Public Sub test3()

  MsgBox «Процедура test3 (Public) вызвана без ключевого слова Call!»

End Sub

Вы можете скопировать приведенный код в свой модуль и посмотреть, запустив процедуру test1, как она последовательно запускает процедуры test2 и test3.

Вызов подпрограмм с аргументами в пределах одного модуля

При вызове процедур Sub с аргументами и ключевым словом Call, аргументы заключаются в скобки, без ключевого слова Call — аргументы не заключаются в скобки:

Private Sub test4()

  Call test5(15, 25)

  test6 256, 312, 4.52

End Sub

Sub test5(a As Single, b As Single)

  MsgBox a + b

End Sub

Sub test6(c As Single, d As Single, e As Single)

  MsgBox c + d + e

End Sub

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

Вызов подпрограмм из разных модулей одной книги

Правила, касающиеся использования оператора Call и заключения аргументов в скобки, верны и для вызова процедур Sub, находящихся в разных модулях. Единственным отличием является необходимость вместе с именем вызываемой подпрограммы указывать место ее расположения. Место расположения и имя подпрограммы разделяются точкой.

Вызываемая подпрограмма расположена в Стандартном модуле

‘Процедура Sub с уникальным именем —

‘возможны два варианта:

УникальноеИмяПроцедуры

ИмяМодуля.УникальноеИмяПроцедуры

‘Процедура Sub с неуникальным именем —

‘возможен только один вариант:

ИмяМодуля.НеуникальноеИмяПроцедуры

  • ИмяМодуля — уникальное имя стандартного модуля, отображаемое в проводнике проекта VBA.

Неуникальное имя процедуры возникает, когда создаются процедуры с одним именем в разных модулях. Если есть вероятность дублирования в дальнейшем имени подпрограммы и лишения ее уникальности, то лучше сразу вызывать ее с указанием имени стандартного модуля.

Вызываемая подпрограмма расположена в модуле книги, модуле листа, модуле формы

‘В модуле книги:

ЭтаКнига.ИмяПроцедуры

‘В модуле листа:

ИмяЛиста.ИмяПроцедуры

Worksheets(«Имя ярлычка листа»).ИмяПроцедуры

‘В модуле формы:

ИмяФормы.ИмяПроцедуры

  • ЭтаКнига — так и пишется, указывает на текущую книгу в которой расположены вызывающая и вызываемая подпрограммы.
  • ИмяЛиста — уникальное имя листа, которое в проводнике проекта VBA указано без скобок (по умолчанию: Лист1, Лист2, Лист3 и т.д.).
  • Имя ярлычка листа — дублирующее имя листа, которое в проводнике проекта VBA указано в скобках.
  • ИмяФормы — уникальное имя пользовательской формы, отображаемое в проводнике проекта VBA.

Вызов процедур Sub из модулей разных книг

Если вызываемая подпрограмма расположена в другой книге, она должна быть объявлена как Public, а книга открыта. Запустить такую процедуру Sub можно с помощью метода Application.Run (протестировано в Excel 2016).

Синтаксис метода Application.Run

Application.Run «ИмяКниги!ИмяМодуля.ИмяПроцедуры», Арг1, Арг2, …, Арг30

  1. ИмяКниги!ИмяМодуля.ИмяПроцедуры — обязательный компонент, полный адрес подпрограммы, заключен в двойные кавычки.
    • ИмяКниги — имя рабочей книги Excel с расширением, в которой находится вызываемая подпрограмма, если имя содержит пробелы, оно заключается в одинарные кавычки — апострофы (‘Имя Книги’).
    • ИмяМодуля — имя модуля для стандартного модуля (для уникальных имен вызываемых подпрограмм может не указываться), имя листа для модуля листа, словосочетание «ЭтаКнига» (без кавычек) для модуля книги.
    • ИмяПроцедуры — имя вызываемой процедуры Sub.
  2. Арг1, Арг2, …, Арг30 — необязательные компоненты, аргументы вызываемой подпрограммы, максимальное количество которых ограничено 30 элементами.

Полный адрес вызываемой процедуры заключен в двойные кавычки, отделен от аргументов и аргументы друг от друга запятыми.

Полный адрес вызываемой процедуры

Может показаться сложным составить полный адрес вызываемой подпрограммы, но на самом деле все очень просто — Excel уже сделал это за нас.

1. Откройте окно со списком макросов.

Список макросов во всех открытых книгах Excel

Список макросов во всех открытых книгах

2. Найдите в списке вызываемую подпрограмму и кликните по ней. Ее полный адрес отобразится в поле «Имя макроса».

3. Скопируйте полное имя вызываемой процедуры Sub и вставьте ее в метод Application.Run, заключив в двойные кавычки.

Один нюанс: в окне «Макрос» не отображаются процедуры с аргументами. Чтобы отобразить такую процедуру, закомментируйте аргументы, а после копирования и вставки раскомментируйте их.

Стоит не забывать о том, что если книга с вызываемой подпрограммой будет переименована, то полное имя вызываемой процедуры Sub изменится и везде, где оно присутствует в коде, его необходимо будет отредактировать.

Пример вызова подпрограмм из другой книги

Допустим, у нас есть рабочая книга Excel под именем «Книга1.xlsm» (или «Книга1.xls» в ранних версиях программы). В ней находятся вызываемые из другой книги процедуры Sub, перечисленные ниже.

В стандартном модуле «Module1»:

Sub Vyzov1()

  MsgBox «Запущена процедура в стандартном модуле!»

End Sub

В модуле листа «Лист1»:

Sub Vyzov2()

  MsgBox «Запущена процедура в модуле листа!»

End Sub

В модуле книги «ЭтаКнига»:

Sub Vyzov3(a As Variant, b As Variant)

  MsgBox «Запущена процедура в модуле книги!» _

  & vbNewLine & «Сумма равна: « & a + b

End Sub

Для последовательного запуска этих подпрограмм можно вставить в любой модуль другой книги Excel следующую процедуру:

Sub ProverkaVyzova()

  Application.Run «Книга1.xlsm!Vyzov1»

  Application.Run «Книга1.xlsm!Module1.Vyzov1»

  Application.Run «Книга1.xlsm!Лист1.Vyzov2»

  Application.Run «Книга1.xlsm!ЭтаКнига.Vyzov3», 555, 445

End Sub

Во второй строке кода пропущено имя стандартного модуля, так как имя подпрограммы оказалось уникальным, а в следующей строке этот же код продублирован, для примера, с именем модуля. В пятой строке — пример запуска процедуры Sub с двумя аргументами.

И еще раз напомню, что имя книги с пробелами заключается в одинарные кавычки (апострофы):

Application.Run «‘Новая Книга 1.xlsm’!Процедура1»

Если у вас есть процедуры, которые часто вызываются из других книг, поместите их в Личную книгу макросов, и они всегда будут доступны.

Заключение

В этой статье не рассмотрено добавление ссылок из одного проекта VBA на другой, которые позволяют работать с модулями и процедурами, находящимися в другом проекте так, как с находящимися в текущем. Причем книга, с которой установлена связь, может быть закрыта. Я предпочитаю работать с Личной книгой макросов, а при попытке, из любопытства, установить связь между двумя книгами, программа Excel, почему-то, отказала мне в этом и эксперименты закончились.

Если хотите поэкспериментировать со связанными книгами, откройте проект VBA, из которого надо установить связь с другой книгой, и выберите в главном меню «Tools» — «References…». В открывшемся окне «References — VBAProject» все открытые книги будут отображены одним словом — «VBAProject». Выделяйте по очереди строки с этим словом и внизу, в информационной рамке, смотрите, какой книге этот проект принадлежит. Поставьте галочку рядом с выбранным проектом и нажмите кнопку «OK». Если книга, с проектом которой устанавливается связь, закрыта, ее не будет в списке. В этом случае, нажмите на кнопку «Browse…», найдите, выбрав расширение, нужную книгу и откройте ее в проводнике. Связь будет установлена, и процедуры из связанных книг будут вызываться по имени с ключевым словом Call или без него, как будто они расположены в одной книге.

Предположим, что нужно записать макрос, открывающий часто используемые книги при запуске Excel. Для этого можно создать макрос Auto_Open. Можно также запускать макрос автоматически при открытии книги.

Прежде чем начать, убедитесь, что на ленте доступна вкладка Разработчик. Если ее нет, выполните указанные ниже действия.

  1. Откройте вкладку Файл и выберите пункт Параметры, а затем — категорию Настроить ленту.

  2. В разделе Настройка ленты в поле Основные вкладки установите флажок Разработчик.

  3. Нажмите кнопку ОК.

Чтобы при запуске Excel автоматически открывались книги, выполните указанные ниже действия.

  1. Откройте вкладку Разработчик и нажмите кнопку Запись макроса.

    Группа "Код" на вкладке "Разработчик"

  2. В поле Имя макроса введите Auto_Open.

  3. В списке Сохранить в выберите пункт Личная книга макросов.

  4. После этого макрос будет доступен при каждом открытии Excel.

  5. Чтобы было проще вспомнить, что делает макрос, введите его описание в поле Описание. Можно также оставить это поле пустым.

  6. Нажмите кнопку ОК.

  7. Откройте вкладку Файл, выберите пункт Открыть и выберите файлы, с которыми работаете каждый день. Они могут находиться в разных местах. Чтобы выбрать несколько файлов в одной папке, щелкните каждый из них, удерживая нажатой клавишу SHIFT.

  8. Откройте вкладку Разработчик и нажмите кнопку Остановить запись.

  9. При закрытии Excel в конечном итоге будет предложено сохранить изменения в личной книге макросов. Нажмите кнопку «Да», чтобы макрос запускался при каждом запуске Excel.

    Каждый раз при запуске Excel автоматически будут открываться книги, включенные в макрос.

Нужна дополнительная помощь?

I have a macro that is on a server. I need to be able to run it from different workstations that connect to this server.

Currently I am doing:

Application.Run ("L:databaselcmsmacromacro1.xlsm!macro_name") 

The error message I am getting is «The macro may not be available in this workbook #1004»

I have already made sure that my security settings are set on the lowest level.

How do I run a macro from another workbook which is hosted on a different server?

would using add-ins help me?

Community's user avatar

asked May 10, 2010 at 20:06

Alex Gordon's user avatar

Alex GordonAlex Gordon

55.8k284 gold badges666 silver badges1051 bronze badges

I think your syntax is missing the single quote characters:

Application.Run ("'L:databaselcmsmacromacro1.xlsm'!macro_name") 

Then, if you needed to pass parameters to it the syntax would be like this:

Application.Run ("'L:databaselcmsmacromacro1.xlsm'!macro_name","param1","param2") 

answered May 10, 2010 at 20:25

Fink's user avatar

2

This error also shows up when there are duplicate macro names in the remote workbook, e.g. two macros named «macro_name». Took me a while to find out!

answered Jul 1, 2014 at 16:01

PaloDravecky's user avatar

Generally in Names a single ‘ is required if you have a space or punctuation in a name so that Excel does not get confused thinking that the space is a deliberate separation, such as in separating arguments from a Method.
In some cases Excel will insist on them. Usually it does no harm to include them, even if they are not needed, for example when no spaces are present in names. Sometimes Excel will then take them out if they are not needed.
http://www.eileenslounge.com/viewtopic.php?f=27&t=25599

answered Mar 20, 2017 at 14:39

Alan Elston's user avatar

Alan ElstonAlan Elston

791 gold badge4 silver badges11 bronze badges

If the macro you need to find relative macro path by using workbook path from which you run macro and you need to run several macros from the array list, the code below will help:

Dim relativePath As String, programFileName As String
Dim selectedProgramsFiles() As String, programsArrayLastIndex As Byte, I As Byte

For I = 0 To programsArrayLastIndex 'Loop through all selected programs
    programFileName = selectedProgramsFiles(I)
    relativePath = ThisWorkbook.Path & "" & programFileName
    Workbooks.Open Filename:=relativePath

    Application.Run ("'" & relativePath & "'!ModuleName.Main")

    Workbooks(programFileName).Activate
    ActiveWorkbook.Close SaveChanges:=False
Next I 'For I = 0 To programsArrayLastIndex 'Loop through all selected program

answered May 9, 2017 at 6:59

Sharunas Bielskis's user avatar

Понравилась статья? Поделить с друзьями:
  • Excel макрос заполнить ячейку
  • Excel макрос заполнить строку
  • Excel макрос заполнить столбец
  • Excel макрос заполнение ячеек с условием
  • Excel макрос заполнение данных