Страницы: 1
RSS
Где сохранить предыдущее значение ячейки для контроля изменений.
 
Ну то что можно хранить копию на другом листе  или в другом диапазон  - это понятно, но задумался, где б еще и задействовал для этого Range.ID. :idea: Получилось не совсем просто , так как потребовался контроль типа данных, ведь в ID text.
В оригинальной задаче был вопрос контроля именно при пересчете формул, поэтому событие Calculate и просмотр определенного диапазона, но это детали.
Сперва запихнул это в проверку данных, и использовал .Validation.ErrorTitle, который без условия то и не влияет, но там была дополнительная обработка ошибки нужна, удалять , добавлять проверу, и тогда про ID вспомнил.

Получилось сляпать такое
Скрытый текст
в примере пересчитывается одна ячейка постоянно и меняется значение в соседней. Остальные только при смене значений, в данном случае формул.
Изменено: БМВ - 17.05.2020 14:07:42
По вопросам из тем форума, личку не читаю.
 
в ходе работы файла в переменной с заполнением ее из реестра при открытии файла и сохранением ее значения в реестр при закрытии
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:... и сохранением ее значения в реестр
Только при этом пользователь должен иметь доступ к реестру Windows.
Неизлечимых болезней нет, есть неизлечимые люди.
 
В своей ветке HKCU он не только может читать, но и писать. Так что это не проблема. А вот то что там потом замусорено будет так что системе от этого не проще, это да.
По вопросам из тем форума, личку не читаю.
 
Хм, сам недавно использовал range.id для хранения уникальной информации об этой ячейке.
Стараюсь не лезть в реестр лишний раз.
Цитата
Ігор Гончаренко написал:
заполнением ее из реестра при открытии файла и сохранением ее значения в реестр при закрытии
Что при этом будет, если будет открыто две или три сессии Excel с данным функционалом? Каша из данных всех открытых сессий?
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Каша из данных всех открытых сессий?
Виталий, конечно можно GUID использовать и отдельную подветку, но, как написал выше, не всегда это удобно и хорошо.,
По вопросам из тем форума, личку не читаю.
 
У ID ещё есть огромный плюс - он не сохраняется при закрытии файла. Учитывая это, временные значения ячеек можно хранить сразу в глобальном массиве: что его, что ID надо инициализировать при открытии файла. Там и проблем с типом данных нет.
Так что хранить предыдущие данные в Проверке тоже имеет свои плюсы.
 
Цитата
tolikt написал:
Там и проблем с типом данных нет.
разве что любой сбой и ресет проекта и нет этого массива.
По вопросам из тем форума, личку не читаю.
 
Если любым сбоем считать закрытие самого Excel, то конечно, массиву - кирдык. Впрочем, ID тоже не выживут. Однако если глюк в файле, то его можно закрыть, не закрывая приложение, а пока жив Excel, будет жить и массив.
Но пользоваться лучше ID. Причина: возможная недостоверность привязки к определённой ячейке. Если в массив в качестве ключа внести некую ссылку на ячейку, то она будет ошибочной при удалении/добавлении строк/столбцов. С ID такого не происходит.
В качестве привязок можно использовать имена ячеек. Т.е. каждой нужной ячейки присваивать уникальное имя и обращаться к нему в массиве. Но тогда это само предыдущее значение можно хранить и в имени ячейки, т.е. каждый раз удаляя старое имя и добавляя новое. Когда-то давно я пытался такое проделывать для сохранения предыдущих значений. Даже более-менее удачно получалось, но правда, если таких ячеек ограниченное количество и там можно было придумать маску для имени, чтоб оно было уникальным. Понятно, что нужно было делать отдельную процедуру для работы с такими именами.
 
Цитата
tolikt написал:
а пока жив Excel, будет жить и массив.
да ладно. Возьмем например просто END и привет массиву.
Тогда уж словарь нужно использовать, где ключ это как раз имя ячейки, а оно состоит из имени файла, листа и адреса, но он также обнулится
Но потом  отслеживать удаление ячеек и удалять из массива ...
По вопросам из тем форума, личку не читаю.
 
Цитата
tolikt написал:
У ID ещё есть огромный плюс - он не сохраняется при закрытии файла.
Считаю что это огромный минус. Кроме имен и примечаний не отследить перемещение ячейки по листу (в результате добавления удаления строк, столбцов).А имена и примечания легко правятся пользователями, можно конечно скрыть, но этот костыль так себе.
«Бритва Оккама» или «Принцип Калашникова»?
 
надо же как TheBestOfTheBest, приподнял тему, а всего то стоило в работе упомянуть  :D
На самом деле тема интересная.
По вопросам из тем форума, личку не читаю.
 
Если нужно хранить дополнительную информацию о ячейках - отличный вариант.
При необходимости постоянного хранения можно при каждом сохранении файла информацию о ячейках и их ID заносить куда-нибудь в документ, при открытии файла обратно раскидать по ячейкам.
Владимир
 
Цитата
bedvit написал:
если будет открыто две или три сессии Excel
у SaveSetting (GetSetting) кроме ключа и значения есть еще 2 параметра (которые формально называются приложение и раздел)
но при небольшом уровне фантазии можно решить что в них написать, чтобы не пересекались данные процессов
что оставить в реестре при закрытии всех процессов, что оттуда читать при новом старте и т.д.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
sokol92, Владимир, к сожалению вариант не проходящий. Кто-то открыл без макросов, наставлял строк и всё сломалось.
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1
Наверх