Что нового

Можно ли наблюдать за выполнением скрипта как в VBA?

PACHOM

Новичок
Сообщения
99
Репутация
0
Здравствуйте!

В VBA если выделить строчку кода и запустить макрос, то последний остановится на выделенном фрагменте и можно будет просмотреть значения переменных и другую информацию (выделяется код путём нажатия на левом поле в редакторе).
Так вот, есть ли что-то подобное в Autoit? А то есть скрипт, а понять полностью не могу (скрипт см. ниже - я в нём не понимаю что занчит
Код:
Until Not $IsErr
). Я понимаю что цикл выполняется пока значение не станет требуемым (не ложным), но как это происходит ... $IsErr становится же всегда равным 0 ... короче не понимаю.

Код:
; ****************************************************************************************
; Пример 1 - Запись данных в ячейку активного листа целевой рабочей книги Excel
; ****************************************************************************************

#include <Excel.au3>

Local $oExcel = _ExcelBookNew() ; Создаем новую рабочую книгу

Global $IsErr = 0 ; флаг возникновения ошибки
$oErr = ObjEvent("AutoIt.Error", "ErrFunc") ; обработчик COM-ошибок

MsgBox(4096, "_ExcelWriteCell | Пример 0", "Не закрывая это окно установите фокус в любой ячейке открывшейся книги " & @LF & _
                                            "просто введите что-либо в ячейку и не нажимайте ENTER." & @LF & _
                                            "После этого нажмите на ОК в этом сообщении.")

Do ; пытаемся записать в ячейку, пока не исчезнет ошибка
  $IsErr = 0
  _ExcelWriteCell($oExcel, "Значение записанное скриптом AutoIt", 1, 1) ; если возникнет COM-ошибка сработает ErrFunc() и установит флаг ошибки
  Sleep(10)
Until Not $IsErr

MsgBox(4096, "_ExcelWriteCell | Пример 1", "Демонстрация завершена успешно, если решена проблема или фокус не был установлен, нажмите ОК")
_ExcelBookSaveAs($oExcel, @TempDir & "\Temp.xls", "xls", 0, 1) ; Сохраняем файл в директории временных файлов, перезаписывая если необходимо.
_ExcelBookClose($oExcel) ; Закрываем рабочую книгу

Func ErrFunc() ; функция устанавливает флаг ошибки
    $IsErr = 1
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
PACHOM [?]
и можно будет просмотреть значения переменных и другую информацию
Это называется "интегрированный отладчик" (debugger). В AutoIt такого нет. Но есть сторонние решения (на любителя). В конце этой темы http://autoit-script.ru/index.php/topic,5780.0.html есть ссылки.

не понимаю что значит
Цикл будет выполняться пока существует ошибка. Т.е. если COM-объект вернёт ошибку, AutoIt об этом "узнает" благодаря специальному встроенному объекту "AutoIt.Error". Функция ErrFunc(), выполняемая при возникновении ошибки COM-объекта, установит $IsErr в 1. Выражение "NOT 1" вернёт 0 и выход из цикла не произойдёт, т.к. этот цикл работает, пока условие ложно.


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

Я понимаю что цикл выполняется пока значение не станет требуемым (не ложным)
http://autoit-script.ru/autoit3_docs/keywords/Do.htm
Код:
Операторы между Do и Until будут выполняться до тех пор пока выражение ЛОЖНО (false)
 
Автор
P

PACHOM

Новичок
Сообщения
99
Репутация
0
Здравствуйте, InnI!

Таким образом:
Выражение "NOT 1" вернёт 0
Выражение "NOT 0" вернёт 1

А если переменная по ошибке, естественно человеческой, будет равна 2, то в таком случае как сработает выражение "NOT 2"?

Спасибо за ссылку и пояснения. И прошу прощения за возможно дурные вопросы ...

С уважением,
ПАХОМ
 
Автор
P

PACHOM

Новичок
Сообщения
99
Репутация
0
Здравствуйте!

Вас понял. Справочку почитал. Благодарю!
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
PACHOM
Вот я написал Debugger, но не пользуюсь, по старинке в MsgBox. А в справке есть раздел, например смотри _DebugReportVar.
 
Верх