Что нового

Запуск макросов Excel

Сообщения
10
Репутация
-1
Здравствуйте. нужна ваша помощь. В AutoIt вообще ничего не понимаю .
узнал об AutoIt только из за того, что понадобилось следующее:
- Запущенно сразу 10 копий Excel
- Во всех 10 Excel открыт файл с одинаковым именем Шаблон.
- В папках 1,2,3,4,5,6,7,8,9,10. в каждой папке лежит файл Шаблон.xls.
- В файле Шаблон.xls есть макрос Test
- Из каждой папки я запускаю 1 файл Шаблон.xls на каждую новую копию Excel.
нужно:
- Вот запущенно сразу 10 копий Excel с файлом Шаблон.xls
- Нужно одновременно запустить макрос Test во всех открытых копиях Excel с файлом Шаблон.xls.
Обязательно, чтобы задержки не было, и запуск макроса произошёл мгновенно одновременно во всех копиях Excel
 

joiner

Модератор
Локальный модератор
Сообщения
2 988
Репутация
501
Василий
мгновенно не получится. только по очереди.
а ответов нет потому, как вариант, лето, отпуск и прочее. лично я не знаю как это сделать. точнее, мог бы узнать, но нет желания. потому что лето и прочее :smile:
если очень нужно, то предложи вознаграждение, может кто и откликнется.
 
АТ
В
Сообщения
10
Репутация
-1
как запустить хотя бы 1 макрос Excel или последовательно 2 и более?
 

ra4o

Скриптер
Сообщения
978
Репутация
180
Пробуйте так:
Код:
#include <Excel.au3>
Local $oExcel = _Excel_Open()
$oWorkbook=_Excel_BookOpen($oExcel, @ScriptDir & "\Test.xls",False,True)
$oWorkbook.Application.Run("Макрос1")
 
АТ
В
Сообщения
10
Репутация
-1
А куда этот код вставлять?


я сделал так:
- открыл редактор SciTE.exe
- вставил туда ваш код, немного изменив под себя.
и получилось так, больше ничего кроме этого кода там нет это всё что есть:

#include <Excel.au3>
Local $oExcel = _Excel_Open()
$oWorkbook=_Excel_BookOpen($oExcell, @ScriptDir & "\Шаблон.xlsb",False,True)
$oWorkbook.Application.Run("Test0")


-Потом сохраняю в файл 1.au3.
- Кладу этот файл рядом с файлом Шаблон.xlsb
- Запускаю файл Шаблон.xlsb
- Запускаю двойным нажатием лкм файлик старт.au3
И выдаёт ошибку.
Прикрепил скриншот ошибки
Прикрепил скриншот внутренности файла 1.au(Верно ли там всё или ещё какой то код нужно там добавить?)
 

Вложения

ra4o

Скриптер
Сообщения
978
Репутация
180
Я ошибся в названии переменной - лишнюю букву написал, исправил в предыдущем сообщении, скопируйте ещё раз.
Запустить можно и прямо из SciTE клавишей "F5"
С Вашими данными:
Код:
#include <Excel.au3>
Local $oExcel = _Excel_Open()
$oWorkbook=_Excel_BookOpen($oExcel, @ScriptDir & "\Шаблон.xlsb",False,True)
$oWorkbook.Application.Run("Test0")
 
АТ
В
Сообщения
10
Репутация
-1
Макрос работал. но не так как мне нужно. я описывал ситуацию, где у меня уже запущен файл Шаблон.xlsb.
А ваш макрос заново его запускает. Мне нужно что бы просто макрос запускался, без запуска макроса. В идеале бы проверку в вашем коде сделать, например: если файл уже открыт, то открывать не надо, или просто вообще не открывать файл, а запускать сразу макрос.
 

ra4o

Скриптер
Сообщения
978
Репутация
180
Если книга уже открыта, то попробуйте так:
Код:
#include <Excel.au3>
Local $oExcel = _Excel_Open()
$oWorkbook=_Excel_BookAttach(@ScriptDir & "\Шаблон.xlsb")
$oWorkbook.Application.Run("Test0")
 
АТ
В
Сообщения
10
Репутация
-1
Вроде сработал.
Скажите какой код, чтобы запустить не из этой же папки а по пути?
и второе, как запустить одновременно или хотя бы последовательно, но быстро(что бы не дожидаться выполнения макроса), несколько макросов?
 

ra4o

Скриптер
Сообщения
978
Репутация
180
чтобы запустить не из этой же папки а по пути?
Код:
;Подключаетесь к уже запущенному экземпляру Excel по указанному пути, в данном случае "@ScriptDir & "\Шаблон.xlsb"" - укажите любой другой путь при необходимости
$oWorkbook=_Excel_BookAttach(@ScriptDir & "\Шаблон.xlsb")
;Или открываете любую книгу Excel по любому пути :
$oWorkbook=_Excel_BookOpen($oExcel, @ScriptDir & "\Шаблон.xlsb",False,True)

Одновременно не получится , а последовательно - просто запускайте нужные макросы, в чём проблема ("$oWorkbook.Application.Run("Test0")") ?
 
АТ
В
Сообщения
10
Репутация
-1
я не это имел ввиду. запускать не разные макросы. это конечно в одной книги не возможно.
Я имел ввиду. чтобы запускать один и тот же макрос, но в разных открытых файлах одновременно, или хотя бы последовательно, что бы не ждать выполнение одной процедуры.

Я вот так сделал:
#include <Excel.au3>
Local $oExcel = _Excel_Open()
$oWorkbook=_Excel_BookAttach("g:\Тест\1\Шаблон.xlsb")
$oWorkbook.Application.Run("Test0")
$oWorkbook=_Excel_BookAttach("g:\Тест\2\Шаблон.xlsb")
$oWorkbook.Application.Run("Test0")
НО! такой вариант запускает последовательно и второй запуск макроса Test0 по пути: "g:\Тест\2\Шаблон.xlsb"
Запускается только если выполнится предыдущий. а мне это не подходит.
 

ra4o

Скриптер
Сообщения
978
Репутация
180
Как вариант - для каждой книги написать свой скрипт запуска макроса и отдельным скриптом запускать уже эти скрипты.
В ручную есть возиожность запустить эти макросы не дожидаясь выполнения предыдущего ?
 
АТ
В
Сообщения
10
Репутация
-1
пробовал в ручную для эксперемента. не получается.
первый процесс запускается, макрос выполняется, в трее висит иконка AutoIt. Запускаю второй, в общем уходит в ожидание пока отработается предыдущий, добавляется вторая иконка Autoit в трей, а толку никакого, работает только 1 макрос всё равно, второй ждёт первый, а чаще после окончание первого и второй не запускается. Сырой этот AutoIt в общем, очень слаб.
 

ra4o

Скриптер
Сообщения
978
Репутация
180
Я имел в виду запуск одновременно нескольких макросов средствами самого Excel , позволяет ?
 

ra4o

Скриптер
Сообщения
978
Репутация
180
Тогда что Вы хотите от Autoit , если сам Excel это не позволяет ?
 
АТ
В
Сообщения
10
Репутация
-1
такое ощущение, что я разговариваю с.... :stars:
Попробую ещё раз объяснить:
-В одном Excel запустить несколько макросов невозможно никаких, не разных не одинаковых.
- Что бы запустить несколько макросов, нужно открывать несколько копий Excel как разный работающий процесс. И в каждом отдельном Excel можно также запускать по одному макросу. Что я и делаю вручную.
- Но в ручную запускать макросы в 20-30 копиях Excel дело муторное и не удобное, поэтому я хотел это дело автоматизировать, чтобы запускать макросы не вручную. Следовательно и оказался тут на форуме с этой замечательной программой.
- Ещё раз ответ на ваш вопрос: В одном Excel запустить несколько макросов невозможно никаких, не разных не одинаковых. В разных копиях можно сколько угодно, на сколько хватит ресурсов ПК. Хоть 100Excel запустите и следовательно 100 макросов.
- Перечитайте ещё раз мой первый пост, там я всё подробно вроде описал.
 

ra4o

Скриптер
Сообщения
978
Репутация
180
И в каждом отдельном Excel можно также запускать по одному макросу. Что я и делаю вручную.
Возможно я не точно задавал вопрос, теперь всё понятно, именно это я и хотел узнать.
Пробовал такой вариант - в каждую папку с документом Excel поместил скомпилированный скрипт с именем "1.ехе" :
Код:
#include <Excel.au3>
$oWorkbook=_Excel_BookAttach(@ScriptDir & "\Шаблон.xlsb")
$oWorkbook.Application.Run("Test0")

отдельно создал скрипт для запуска всех предыдущих такого вида:
Код:
ShellExecute(@ScriptDir&'\1\1.exe')
ShellExecute(@ScriptDir&'\2\1.exe')
ShellExecute(@ScriptDir&'\3\1.exe')

При этом второй скрипт отрабатывает сразу, то есть все exe-шники запускаются сразу , но уже макросы отрабатывают последовательно :stars:
 
Верх