Страницы: 1
RSS
Функция пользователя не пересчитывается при изменении формата ячейки, не работает автоматическое вычисление
 
Здравствуйте, помогите с пользовательской функцией, не работает автоматическое вычисление. Заранее благодарен!
Вот моя функция:
Код
Function CountCcolor(range_data As Range, criteria As Range) As Long
Dim datax As Range
Dim xcolor As Long
xcolor = criteria.Interior.ColorIndex
For Each datax In range_data
If datax.Interior.ColorIndex = xcolor Then
CountCcolor = CountCcolor + 1
End If
Next datax
End Function
 
осталось показать пример, на котором это не работает
с какими параметрами вызываете функцию, что пишет результатом и что вас в нем не устраивает
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
к самой функции вопросов нет, интересует именно автоматическое вычисление, не хочет автоматом считать изменения в диапазоне  
 
напишите так:
Код
Function CountCcolor(range_data As Range, criteria As Range) As Long
  Dim datax As Range
  Dim xcolor As Long
  Application.Volatile
  xcolor = criteria.Interior.ColorIndex
  For Each datax In range_data
    If datax.Interior.ColorIndex = xcolor Then
      CountCcolor = CountCcolor + 1
    End If
  Next datax
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Не сработало
 
считайте вручную
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
1. Название темы ни о чем, модераторы просто обяжут придумать новое.
2. Что значит не пересчитывает? При каких действиях? Когда заливку меняете? Если да - то и не будет и ничего не сделать, т.к. изменение формата ячейки не вызывает никакого события.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Это печально. Спасибо за помощь.
 
Еще печальнее то, что название темы Вы так и не предложили. Предложу за Вас, но осадок остался :) Т.к. сделать это должны были все же Вы.
Тема для модератора: Функция пользователя не пересчитывается при изменении формата ячейки
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Если я правильно понял тут советом не помогли.
Сам столкнулся с ситуацией при заливки в ячейке значения не менялось, а вот если скопировать и вставить образец (уже залитую ячейку) все работало.

Причина проста пересчет формул в Excel автоматически не происходит при изменении заливки ячеек, то данная функция не пересчитывается автоматически.
Для того, чтобы принудительно пересчитать формулы активного листа используйте сочетание клавиш Ctrl+Alt+F9.

Решение:
Сначала заливаем нужные ячейки потом Ctrl+Alt+F9 и вуаля!  
 
Цитата
Алексей написал:
Сначала заливаем нужные ячейки потом Ctrl+Alt+F9 и вуаля!  
Я аплодирую стоя. В результате получаем автоматический пересчет после принудительного ручного  :D . У нас так документооборот автоматизирован, тут загрузи, сюда нажми, тут подпихни, тому позвони, чтоб согласовал. заявку сделай чтоб за кого-то согласовали .... а так все автоматом.
По вопросам из тем форума, личку не читаю.
 
Цитата
dim_gex написал:
Функция пользователя не пересчитывается при изменении формата ячейки
извините за бедность речи
а с х... какого она должна пересчитываться?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
ну, чисто теоретически - Microsoft мог бы и придумать какое-нибудь событие при изменении формата ячейки)
Пользователям-программистам было бы удобно. Если же события SelectionChange и другие. Т.е. приложение отслеживает, что что-то изменилось на листе.
Так и с форматом - пользователь  же поменял что-то на листе
Изменено: New - 13.01.2021 00:14:09
 
Цитата
New написал:
чисто теоретически
Цитата
New написал:
Пользователям-программистам было бы удобно
А если вспомнить что формат изначально служит для визуализации результата и данные первичны и не на оборот, то событие не нужно. Или на оборот, что не пойти дальше и чисто теоретически наделать встроенных функций на все случаи буйной фантазии.
А теперь смотрите, появилось такое событие как изменение формата. Есть функция которая срабатывает по этому событию и вносит изменений или запускает пересчет или просто выводит результат на лист. Если формат меняется скриптом или УФ, то получить зацикливание - раз плюнуть и в отличи от штатных формул- отследить это силами приложения почти не реально.
По вопросам из тем форума, личку не читаю.
 
Цитата
Алексей написал:
Сначала заливаем нужные ячейки потом Ctrl+Alt+F9 и вуаля!
ага. Только еще останется в функцию добавить в самом начале строку: Application.Volatile True. Иначе никакого пересчета может не произойти.
Ну и как уже справедливо заметили - так себе автоматизация. Залили и нажали комбинацию. С таким же успехом можно не париться и выделив ячейку с UDF нажать F2 затем Enter - произойдет пересчет всех этих UDF :)
Изменено: Дмитрий(The_Prist) Щербаков - 13.01.2021 07:57:02
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Помнится писал я тут, но интерес ни у кого не возник. Но попытки развить сие до запуска пересчета приводили к краху приложения, но "отловить" событие получилось.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ: ни у кого не возник
привет, Миш  ;)
Я не видел (сейчас добавил себе), но вообще метод-то ненадёжный — то срабатывает, то нет. Плюс это UDF для УФ — короче говоря, слишком сложно, нестабильно и не особо применимо в реальных проектах — так, факультативно (svistoplyska edition), для знания только  :)
Изменено: Jack Famous - 13.01.2021 09:12:45
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous,  о нестабильности я там писал. но просто как вариант.
По вопросам из тем форума, личку не читаю.
 
Цитата
Алексей написал:
тут советом не помогли
Цитата
Алексей написал:
пересчет формул в Excel автоматически не происходит при изменении заливки ячеек

Алексей, посмотрите в файле, при изменении цвета заливки ячеек формулы пересчитываются автоматически.
p.s.: у меня всё прекрасно работает в Windows 7 / Excel 2007.
 
Evgenyy,  выделяем диапазон ячеек и меняем фон на тот что в topleft и расстраиваемся от результата  :( . Хотя докрутить наверно можно.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
расстраиваемся от результата
Вообще заливка ячейки белым цветом и ячейка без заливки тождественные понятия. Никогда не встречал в своей практике таблиц с ячейками залитыми белым цветом.
Изменено: Evgenyy - 18.01.2021 07:02:06
 
Evgenyy,
вы суслика видите? а он есть! (не зависимо т ваших восприятий цвета)
знаете для чего человечество придумало белый шоколад? чтобы негры тоже могли замараться!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Evgenyy, Я не про белый, Выделяйте всю таблицу B3:L13 и меняйте фон на пурпурный, как в B3.
По вопросам из тем форума, личку не читаю.
 
1. выделяете В3:C4 - без заливки (количество ячеек двух цветов изменилось, пересчитались)
2. вытеляете В3:Е6 - без заливки (количество залитых ячеек поменялось? а а таблице N:Q - все без изменений)
алгоритм действий пользователя, при котором система учета в цветных ячейках никак не реагирует, понятен?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Evgenyy написал:
заливка ячейки белым цветом и ячейка без заливки тождественные понятия
мдя?

Цитата
Evgenyy написал:
Никогда не встречал в своей практике таблиц с ячейками залитыми белым цветом
ну просто вам ещё не встретился юзер, не умеющий отключать отображение сетки
Изменено: buchlotnik - 17.01.2021 20:08:44
Соблюдение правил форума не освобождает от модераторского произвола
Страницы: 1
Наверх