Русское сообщество AutoIt

Общий раздел по AutoIt => Стол заказов => Тема начата: Grell от Декабрь 08, 2018, 20:57:21

Название: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: Grell от Декабрь 08, 2018, 20:57:21
Версия AutoIt: 3.
Описание:
Здравствуйте.
Имеется скрипт, который выдает ошибку в консоли:
$oExcel.Run("test")
$oExcel^ ERROR
При этом сам  скрипт - свою задачу прекрасно выполняет (перед тем как выдать ошибку).
В общем проблема только в том, что этот скрипт срабатывает только один раз - и его приходится запускать по новой.

Как сделать, чтобы этот скрипт - не реагировал на $oExcel^ ERROR и не вылетал после нее, а продолжал бы работу ?
(нажмите для показа/скрытия)
Примечания:

Сейчас использую вот такой дополнительный скрипт, чтобы решить эту проблему.
Но он какой-то уж слишком примитивный:
(нажмите для показа/скрытия)
Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: ra4o от Декабрь 08, 2018, 23:02:52
Так работать с Excel у Вас не получится, посмотрите примеры, описание функций по работе с Excel.
Я думаю , нужно , как минимум добавить строку
Код: AutoIt [Выделить]
$oExcel=_Excel_Open()

От " $oExcel.Run("test")" Вы чего ожидаете ? Опишите, что Вы хотите добиться работой своего скрипта ?
Цитировать
При этом сам  скрипт - свою задачу прекрасно выполняет
Если работа с Excel не входит в задачи скрипта , уберите всё, что касается Excel, в таком виде , как есть Ваша функция "_Example()" работать НЕ будет !
Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: Grell от Декабрь 08, 2018, 23:21:09
ra4o  [?]
Цитировать
Если работа с Excel не входит в задачи скрипта , уберите всё, что касается Excel
Ну так скрипт - прекрасно выполняет свою задачу именно в экселе.
Он запускает экселевский макрос из экселя.

Насчет $oExcel=_Excel_Open()  - то файл xls уже открыт на момент запуска скрипта - и по-новой открывать его не надо.

Единственная проблема - это вылетающее со звуком окно "Autoit error".
Это окно вылетает тогда - когда скрипт свою задачу уже выполнил.

Сейчас использую вот такой дополнительный скрипт, чтобы решить эту проблему.
Но все равно окошко хоть и ненадолго вылетает, шумит - в общем мешает.
(нажмите для показа/скрытия)

Как основному скрипту вообще проигнорировать это вылетающее окно, чтобы оно не появлялось всякий раз со звуком ?
Может есть какой-то способ ?
Например условие - если скрипт выдает ошибку - то запретить появление "окна ошибки".


Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: ra4o от Декабрь 08, 2018, 23:40:11
Цитировать
Ну так скрипт - прекрасно выполняет свою задачу именно в экселе.
В таком случае уберите строку "$oExcel.Run("test")" на которую он ругается.
Цитировать
Он запускает экселевский макрос из экселя.
Каким образом он это делает ?
Может не нужен макрос , а всё напишите на AutoIt ?
Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: Grell от Декабрь 09, 2018, 00:02:56
ra4o  [?]
Цитировать
В таком случае уберите строку "$oExcel.Run("test")" на которую он ругается.
А как же тогда скрипт - будет макрос из экселя запускать ?



Добавлено: Декабрь 09, 2018, 00:04:19
ra4o  [?]
Цитировать
Может не нужен макрос , а всё напишите на AutoIt ?
Так вот AutoIt и дает команду - на запуск макроса из экселя.
Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: ra4o от Декабрь 09, 2018, 01:34:12
Цитировать
Насчет $oExcel=_Excel_Open()  - то файл xls уже открыт на момент запуска скрипта - и по-новой открывать его не надо
_Excel_Open() - Подключается к существующему экземпляру Excel или создает новый
Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: Grell от Декабрь 09, 2018, 01:42:06
ra4o, поставил строку $oExcel=_Excel_Open()
По-прежнему скрипт выдает окно с той же ошибкой.
Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: ra4o от Декабрь 09, 2018, 02:03:09
Вот, что я имел в виду :
Код: AutoIt [Выделить]
$oExcel=_Excel_Open()
$oBook=_Excel_BookAttach(@ScriptDir & "\1.xls")
$oBook.Application.Run("test")
 

Или ещё проще :
Код: AutoIt [Выделить]
$oExcel=_Excel_Open()
$oExcel.Run("test")

Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: Grell от Декабрь 09, 2018, 06:45:39
ra4o
При обоих вариантах - по-прежнему вылетает окно ошибки.

Так я же спрашиваю о том - как проигнорировать ошибку и продолжить работу скрипта.
Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: joiner от Декабрь 09, 2018, 08:42:35
Запуск макроса (http://autoit-script.ru/index.php?topic=19458.0)
ошибка выпадает потому, что переменная не является объектом. значит проверка на наличие объекта
Код: AutoIt [Выделить]
If IsObj($oBook) Then $oBook.Application.Run("test")

Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: ra4o от Декабрь 09, 2018, 10:52:46
joiner, в этом случае не запустится макрос, но меня очень смущает то, что Grell утверждает в том, что макрос у него отрабатывает, хоть на этой строке и ошибка :think:
Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: Grell от Декабрь 13, 2018, 07:26:23
joiner
Выдает ошибку :
If IsObj($oBook) Then $oBook.Application.Run("test")
If IsObj($oBook) Then $oBook.Application^ ERROR

Но я все-таки спрашиваю о том - как проигнорировать ошибку (чтобы просто окно с ошибкой не выскакивало) и продолжить работу скрипта.
Название: Re: Как игнорировать сообщение об ошибки и продолжить работу скрипта
Отправлено: alex33 от Январь 03, 2019, 14:31:30

Я когда-то делал так. Попробуй вставить в свой скрипт, в начало кода.
Код: AutoIt [Выделить]
#AutoIt3Wrapper_Run_AU3Check=n
Global $oErrorHandlerGlobal = ObjEvent("AutoIt.Error", "_ErrFunc")
If IsDeclared("__g_oIEErrorHandler") Then Execute('_IEErrorHandlerRegister("_ErrFunc")')
        ; возможно для xl тоже надо регистрировать обработчик,
            ; не проверял
; User's COM error function. Will be called if COM error occurs
Func _ErrFunc($oError)
    ; Do anything here.
EndFunc   ;==>_ErrFunc