Что нового

Как игнорировать сообщение об ошибки и продолжить работу скрипта

Grell

Новичок
Сообщения
127
Репутация
0
Версия AutoIt: 3.
Описание:
Здравствуйте.
Имеется скрипт, который выдает ошибку в консоли:
Код:
$oExcel.Run("test")
$oExcel^ ERROR
При этом сам скрипт - свою задачу прекрасно выполняет (перед тем как выдать ошибку).
В общем проблема только в том, что этот скрипт срабатывает только один раз - и его приходится запускать по новой.

Как сделать, чтобы этот скрипт - не реагировал на $oExcel^ ERROR и не вылетал после нее, а продолжал бы работу ?
Код:
#include <MsgBoxConstants.au3>
#include <Excel.au3>

Opt('WinTitleMatchMode', -2)



Local $sFile = 'F:\-2\File.txt'  
Local $iSizeNew, $iSize = FileGetSize($sFile)
If @error Then Exit 10
While Sleep(200)
    $iSizeNew = FileGetSize($sFile)
    If @error Then Exit 20
    If $iSizeNew <> $iSize Then
        _Example()
        $iSize = $iSizeNew
    EndIf
WEnd

 Func _Example()
    Local $oBook = _Excel_BookAttach(@ScriptDir & "\1.xls")
    If @error Then Exit MsgBox($MB_ICONERROR + $MB_TOPMOST, "Ошибка", "Окно не найдено")
    Local $oExcel = $oBook.Application
    $oExcel.Run("test")
EndFunc   ;==>_Example
Примечания:

Сейчас использую вот такой дополнительный скрипт, чтобы решить эту проблему.
Но он какой-то уж слишком примитивный:
Код:
Opt('WinTitleMatchMode', -2)

While 1

WinWaitActive("Autoit Error")
Sleep(500)
WinClose("Autoit Error")
Sleep(100)

ShellExecute("F:\-2\скрипт.au3")

WEnd
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Так работать с Excel у Вас не получится, посмотрите примеры, описание функций по работе с Excel.
Я думаю , нужно , как минимум добавить строку
Код:
$oExcel=_Excel_Open()

От " $oExcel.Run("test")" Вы чего ожидаете ? Опишите, что Вы хотите добиться работой своего скрипта ?
При этом сам скрипт - свою задачу прекрасно выполняет
Если работа с Excel не входит в задачи скрипта , уберите всё, что касается Excel, в таком виде , как есть Ваша функция "_Example()" работать НЕ будет !
 
Автор
G

Grell

Новичок
Сообщения
127
Репутация
0
ra4o [?]
Если работа с Excel не входит в задачи скрипта , уберите всё, что касается Excel
Ну так скрипт - прекрасно выполняет свою задачу именно в экселе.
Он запускает экселевский макрос из экселя.

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

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

Сейчас использую вот такой дополнительный скрипт, чтобы решить эту проблему.
Но все равно окошко хоть и ненадолго вылетает, шумит - в общем мешает.
Код:
Opt('WinTitleMatchMode', -2)

While 1

WinWaitActive("Autoit Error")
Sleep(500)
WinClose("Autoit Error")
Sleep(100)

ShellExecute("F:\-2\скрипт.au3")

WEnd

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

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Ну так скрипт - прекрасно выполняет свою задачу именно в экселе.
В таком случае уберите строку "$oExcel.Run("test")" на которую он ругается.
Он запускает экселевский макрос из экселя.
Каким образом он это делает ?
Может не нужен макрос , а всё напишите на AutoIt ?
 
Автор
G

Grell

Новичок
Сообщения
127
Репутация
0
ra4o [?]
В таком случае уберите строку "$oExcel.Run("test")" на которую он ругается.
А как же тогда скрипт - будет макрос из экселя запускать ?



Добавлено:
Сообщение автоматически объединено:

ra4o [?]
Может не нужен макрос , а всё напишите на AutoIt ?
Так вот автоит и дает команду - на запуск макроса из экселя.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Насчет $oExcel=_Excel_Open() - то файл xls уже открыт на момент запуска скрипта - и по-новой открывать его не надо
_Excel_Open() - Подключается к существующему экземпляру Excel или создает новый
 
Автор
G

Grell

Новичок
Сообщения
127
Репутация
0
ra4o, поставил строку $oExcel=_Excel_Open()
По-прежнему скрипт выдает окно с той же ошибкой.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вот, что я имел в виду :
Код:
$oExcel=_Excel_Open()
$oBook=_Excel_BookAttach(@ScriptDir & "\1.xls")
$oBook.Application.Run("test")

Или ещё проще :
Код:
$oExcel=_Excel_Open()
$oExcel.Run("test")
 
Автор
G

Grell

Новичок
Сообщения
127
Репутация
0
ra4o
При обоих вариантах - по-прежнему вылетает окно ошибки.

Так я же спрашиваю о том - как проигнорировать ошибку и продолжить работу скрипта.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Запуск макроса
ошибка выпадает потому, что переменная не является объектом. значит проверка на наличие объекта
Код:
If IsObj($oBook) Then $oBook.Application.Run("test")
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
joiner, в этом случае не запустится макрос, но меня очень смущает то, что Grell утверждает в том, что макрос у него отрабатывает, хоть на этой строке и ошибка :scratch:
 
Автор
G

Grell

Новичок
Сообщения
127
Репутация
0
joiner
Выдает ошибку :
If IsObj($oBook) Then $oBook.Application.Run("test")
If IsObj($oBook) Then $oBook.Application^ ERROR

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

alex33

Скриптер
Сообщения
1,457
Репутация
186
Я когда-то делал так. Попробуй вставить в свой скрипт, в начало кода.
Код:
#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
 
Верх