Что нового

Запуск макроса Excel в "тихом" режиме

CrazyDoc

Новичок
Сообщения
75
Репутация
2
Пытаюсь создать скрипт для "тихой" работы в Excel. Прочитал Help - научился вписывать в нужные строки, нужную информацию без отображения в окне Win(кстати это не существенно - главная задача это работа скрипта в фоновом режиме, т.е. чтобы скрипт не прерывал работу пользователя, а увидит работу скрипта пользователь или нет - не важно). Теперь не могу решить проблему по запуску макроса(который обрабатывает введенные строки) в этом окне. Можете что-либо подсказать по этому поводу?
Попробовал вот так:
Код:
#include <Excel.au3>
Local $oAppl = _Excel_Open(False,False)
Local $oWorkbook=_Excel_BookOpen($oAppl,@ScriptDir&"\Extras\_Excel1.xls",False,True)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "Тут был Вася","A8")
$oWorkbook.Run("_Excel1.xls!Module1.Макрос1")
_Excel_BookClose($oWorkbook,True)
, не получилось(((
 
Автор
C

CrazyDoc

Новичок
Сообщения
75
Репутация
2
Насколько я понял(исходя из этого
The Run method returns whatever the called macro returns. Objects passed as arguments to the macro are converted to values (by applying the Value property to the object). This means that you cannot pass objects to macros by using the Run method.
), выбранный метод не изменит файл а вернет результат, который должен был быть получен по выполнению макроса?

Попробовал вот так:
Код:
#include <Excel.au3>
$oAppl = _Excel_Open(False,False)
$oWorkbook=_Excel_BookOpen($oAppl,@ScriptDir&"\Extras\_Excel1.xlsm",False,True)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "Тут был Вася","A8")
$oWorkbook.SendKeys("^q",True) //--здесь горячие клавиши макроса
$oWorkbook.SendKeys("^s",True) //--здесь сохранение файла
_Excel_BookClose($oWorkbook,True)
не получается(( - мб я неверно даю ссылку на приложение?
 

СН3СН2ОН

Знающий
Сообщения
78
Репутация
12
Код:
#include <_My_Excel.au3>
Local $oAppl = _Excel_Open()
$oWorkbook1=_Excel_BookOpen($oAppl, @ScriptDir & "\2.xls",False,True)
$oWorkbook1.Application.Run("Module1.Макрос1")

Ключевое слово Application
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
CrazyDoc [?]
Попробовал вот так:
Специально ведь выделил Application. :smile:
Попробуйте так.
Код:
;~ ...
$oAppl.Run("_Excel1.xls!Module1.Макрос1")
;~ или
$oWorkbook.Application.Run("_Excel1.xls!Module1.Макрос1")
;~ ...
 
Автор
C

CrazyDoc

Новичок
Сообщения
75
Репутация
2
получилось=) думал что Application надо заменить на $oWorkbook а не добавить в конец ссылки.
мне показалось или
Код:
$oAppl.Run("_Excel1.xls!Module1.Макрос1")

работает существенно быстрее чем
Код:
$oWorkbook.Application.Run("_Excel1.xls!Module1.Макрос1")
???
если это действительно так, то с чем это связано не подскажите?
и еще, отдельное спасибо madmasles на ссылку к MSDN, не знал вообще до этого момента что что-то подобное существует, а пример взял буквально с потолка по поиску на форуме=)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
CrazyDoc [?]
работает существенно быстрее
ИМХО, во втором варианте Вы сначала получаете объект Application, а потом вызываете макрос.
 
Автор
C

CrazyDoc

Новичок
Сообщения
75
Репутация
2
я валенок. надо было справку читать внимательнее:
Код:
_Excel_Open
- открывает окно или подключается к существующему
Код:
_Excel_BookOpen
- открывает книгу
т.е. первый вариант, если книга уже открыта, отправит все команды напрямую к ней. а второй, даже если книга уже открыта - откроет еще один экземпляр. как то так?
 
Верх