Что нового

Ошибка записи в открытую книгу Excel при редактировании ячейки.

PACHOM

Новичок
Сообщения
99
Репутация
0
Если в момент записи на лист Excel я редактирую ячейку, то выдаётся ошибка. Как её обработать или предотвратить?
Я вышел из ситуации путем отправки команды Enter. Но это плохой вариант.
Код:
; ****************************************************************************************
; Пример 1 - Запись данных в ячейку активного листа целевой рабочей книги Excel
; ****************************************************************************************

#include <Excel.au3>

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

    _ExcelWriteCell($oExcel, "Значение записанное скриптом AutoIt", 1, 1)

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

PACHOM

Новичок
Сообщения
99
Репутация
0
или предотвратить
Код:
_ExcelBookNew(0)
Данный способ мне не подходит.

Код:
If @error Then

Этот способ подходит, но он не срабатывает. Просьба показать на примере как им правильно пользоваться.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
PACHOM [?]
как им правильно пользоваться
В вашем случае ошибка происходит внутри функции, поэтому @error не возвращается. Здесь нужно использовать обработчик COM-ошибок. Изучайте справку по
Код:
ObjEvent()
А это пример для конкретно вашего случая
Код:
; ****************************************************************************************
; Пример 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
 
Автор
P

PACHOM

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

Спасибо! Всё мурчит как надо! Есть вопрос конечно по циклу ... но это в другой теме :smile:

:friends:
 
Верх