[Excel-VB]Странная блокировка листа в Event-handler'e
если просто писать Range("A1") = 1, то должен быть активен лист, на диаграмме, напрмер, нет ячеек.
если дело в этом, то пиши полностью Workbooks("a.xls").Worksheets("erpst").Range("A1").value=1
фокус определенно не влияет (уж была попытка полную адресацию до объекта использовать): Приведенный код находится в модуле листа, там без явного указания объекта-родителя считается, что Range относится строго к листу, которому принадлежит модуль, в котором исполняется код.
Оставить комментарий
Trofimovyoa
На листе Excel расположен ActiveX объект (код которого не доступен который сыпет Eventы, в обработчиках Eventoв есть код типаТак вот, при обильном приходе Eventoв и при интерактивных операциях с книгой excel (выделение ячеек, ввод данных) даже с другими листами иногда вываливается ошибка "Application-defined or object-defined error" именно на процитированном выше коде. Такое впечатление, что иногда запись в ячейки лочится, и если в этот момент приходит Event, желающий модифицировать значение в какой-нибудь ячейке - выпадает ошибка.
Есть также класс Eventoв от того же объекта, при обработке которых описанная выше ситуация возникает в 100% случаев, даже если пользователь ничего не делает в это время, а сам Excel свернут.
Еще интересен тот факт, что при выполнении "Debug" возникшей ошибки на попытку пройти строку кода, записывающую значение в ячейку листа по F8 ошибка повторяется, то есть код, модифицирующий лист, как бы не может быть выполнен даже в режиме отладки. Однако, стоит пропустить этот злополучный фрагмент и продолжить выполнение кода по F5 - на листе отражается результат команды, на которой ошибался Excel, и которая была пропущена при отладке (в данном примере в ячейке А1 записывается 1, хотя команда Range("A1") = 1 была пропущена).
Вопросы: как добиться беспрепятственной и безошибочной записи Eventами значений в ячейки листа? Какие могут быть версии "магического" проявления результатов пропущенных при отладке команд?