Статус ячейки

Автор Alex16, 8 декабря 2016, 08:40

0 Пользователи и 1 гость просматривают эту тему.

Alex16

Доброе время! Как узнать что какая-то ячейка находится в режиме редактирования?
т.е. нужно в начале макроса узнать а не редактируется ли какая-нибудь ячейка на листе и если да, то сохранить в ней данные.
Что-то типа так

sub TestEditCell
if ThisComponent.Sheets(0) is CellEditing then ???
.....
end sub

economist

Кто-то забывает нажать на [Enter]?
Так это лечится само - многократным повторным вводом...

Какая-то надуманная "проблема".
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Alex16

Цитата: economist от  8 декабря 2016, 06:48
Так это лечится само - многократным повторным вводом...

Какая-то надуманная "проблема".
Да нет. У меня на листе данные отчета подгружаются(сохраняются) при изменении комбобокса(списка)
Так вот обратил внимание, что если ячейка находилась в режиме редактирования и в этот момент выбрать отчет другого пользователя в списке, то эта ячейка(которая редактировалась у предыдущего пользователя, сохраняется уже новому. Это косяк :)

ЦитироватьКто-то забывает нажать на [Enter]?
Ну в общем-то да.

kompilainenn

Цитата: economist от  8 декабря 2016, 06:48Какая-то надуманная "проблема".
не стоит так категорично высказываться. человек решает свою проблему, значит эта проблема у него есть.
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

Alex16

#4
Временно (а может и постоянно:)) решил это так:
Упс... Не работает :(

economist

Это не режим общего доступа?

Если монопольно - можно в макросе обработки комбо-бокса выключить режим редактирования или передать приложению нажатие клавиши Enter.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Alex16

Цитата: economist от  8 декабря 2016, 11:02Это не режим общего доступа?
Нет, файл открыт в один момент времени одним оператором.
Цитата: economist от  8 декабря 2016, 11:02Если монопольно - можно в макросе обработки комбо-бокса выключить режим редактирования
Как это сделать?

Вот тестовый файлик, может это баг? ...небольшой)

rami

Цитата: Alex16 от  8 декабря 2016, 07:06Да нет. У меня на листе данные отчета подгружаются(сохраняются) при изменении комбобокса(списка)
Так вот обратил внимание, что если ячейка находилась в режиме редактирования и в этот момент выбрать отчет другого пользователя в списке, то эта ячейка(которая редактировалась у предыдущего пользователя, сохраняется уже новому. Это косяк
Да, нет, может быть, точно, кто бы подумал ;D , выполните в начале макроса:ThisComponent.calculate

Alex16

#8
Цитата: rami от  8 декабря 2016, 12:50выполните в начале макроса:
Хм.. В тестовом файле это сработало. А в рабочем - нет :(
И я догадываюсь почему. Не вызывается событие листа "Содержимое изменено". А у меня в этом событии идет сохранение ячейки на другой лист.
Но с ThisReport.Calculate теперь просто данные редактируемой ячейки теряются, т.е. хоть в чужой отчет не пишутся.

rami

Цитата: Alex16 от  8 декабря 2016, 13:29И я догадываюсь почему. Не вызывается событие листа "Содержимое изменено". А у меня в этом событии идет сохранение ячейки на другой лист.
Событие листа "Содержимое изменено" вызывается, даже раньше, чем показывает print от кнопки. Проблема в чём-то другом.

Alex16

#10
Цитата: rami от  8 декабря 2016, 13:42Событие листа "Содержимое изменено" вызывается, даже раньше, чем показывает print от кнопки. Проблема в чём-то другом
Странно. В тестовый файл который выше, добавил макрос с одной строкой print "changelist" на событие событие изменения. У меня оно не показывается. Т.е. ввел в A1 значение и находясь в режиме редактирования нажал кнопку. Вылезло сообщение с предыдущим значением из А1. Закрыл сообщение, и снова нажал кнопку, и опять показалось сообщение со старым значением из А1 И так можно долго нажимать. Но если потом кликнуть по листу, то сразу вылетает сообщение "changelist".
Стоп, забыл вернуть Calculate в тестовый файл. Да, с ним все в порядке.... Буду искать у себя значит. Спасибо.

Alex16

У меня селектлистбокс срабатывает раньше чем событие листа "содержимое изменено" отсюда этот косяк.
И в голову ничего не приходит как с этим бороться?
Дело в том, что в событии изменения листбокса(селектлистбокс) уже другой индекс (новый оператор), а следом идет событие "содержимое изменено" в котором идет сохранение данных но еще старого оператора. Вот поэтому эта последняя ячейка, если она в режиме редактирования записывается другому оператору :(
По идеи, даже по логике, событие изменения листа должно произойти быстрее чем событие изменение списка. Там же наверное еще события потери фокуса, получение фокуса идут....

rami

Цитата: Alex16 от  9 декабря 2016, 13:19По идеи, даже по логике, событие изменения листа должно произойти быстрее чем событие изменение списка. Там же наверное еще события потери фокуса, получение фокуса идут....
Нам эти идеи чужды 8-), элементы управления находятся на рисованной странице, поэтому сначала срабатывает элемент управления (если вы с ним работаете), а затем если есть связь с листом, идут события листа.

Alex16

Цитата: rami от  9 декабря 2016, 13:52поэтому сначала срабатывает элемент управления (если вы с ним работаете), а затем если есть связь с листом, идут события листа.
Ну тогда понятно поведение. Значит попрошу нажимать Ентер. Хотя вот пришла мысль в событии при получении фокуса списком делать calculate...

JohnSUN

Цитата: Alex16 от  9 декабря 2016, 15:19
И в голову ничего не приходит как с этим бороться?
О, если бы ты только догадывался, что иногда приходит в голову!..  ;D
Например, отказаться от элемента управления (как ни крути - чужеродного внедрения в вычислительном листе) и заменить его выбором из списка, который делается обычным "Данные-Проверка-Диапазон ячеек". Куча народу поступает именно так и (почти!) никто не жалуется. В моем примере с быстрым перекрашиванием и защитой именно так и сделано. Отпадает необходимость формировать макросом список пользователей и - опять же макросом - анализировать кто выбран в этот раз и кто был раньше, и раскрашивать, и защищать-разрешать, итд-итп-лтд-лтп...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне