Создал UDF для подсчёта количества одинаковых вертикальных данных, назовём их рисунками, по столбцам. Образец "рисунка", или аргумент, для поиска указывается в А1. Столкнулся со следующей проблемой: при работе на нескольких листах, но по тем же столбцам (диапазонам), функция возвращает для всех листов одинаковое значение, еоторое получается на активном листе. Т.е. если происходит изменение аргумента на активном "листе1" и функция возвращает количество найденных таких рисунков, допустим, в столбце В, то в том же месте на листе2 эта функция вернёт это же значение, хотя количество этих "рисунков" там иное. Это сродни, если бы я делал СУММ разных слагаемых на разных листах, но в одном диапазоне, а сумма возвращалась бы одинаковая... Удивительно, что на одном листе, но в разных столбцах, функция работает как задумывалось. Прошу совета, где искать проблему. Спасибо!
Файл с примером и кодом UDF прикрепил/
Добрый день!
Создал UDF для подсчёта количества одинаковых вертикальных данных, назовём их рисунками, по столбцам. Образец "рисунка", или аргумент, для поиска указывается в А1. Столкнулся со следующей проблемой: при работе на нескольких листах, но по тем же столбцам (диапазонам), функция возвращает для всех листов одинаковое значение, еоторое получается на активном листе. Т.е. если происходит изменение аргумента на активном "листе1" и функция возвращает количество найденных таких рисунков, допустим, в столбце В, то в том же месте на листе2 эта функция вернёт это же значение, хотя количество этих "рисунков" там иное. Это сродни, если бы я делал СУММ разных слагаемых на разных листах, но в одном диапазоне, а сумма возвращалась бы одинаковая... Удивительно, что на одном листе, но в разных столбцах, функция работает как задумывалось. Прошу совета, где искать проблему. Спасибо!
Добрый день. Если отключить Application.Volatile True, то влияние пропадает. Почему - не знаю... Но и автопересчёта нет, ибо влияющие ячейки не указаны в аргументах. Я бы переписал механизм, заодно и код бы упростился. Но это только совет
Добрый день. Если отключить Application.Volatile True, то влияние пропадает. Почему - не знаю... Но и автопересчёта нет, ибо влияющие ячейки не указаны в аргументах. Я бы переписал механизм, заодно и код бы упростился. Но это только совет Hugo
Спасибо за совет, Hugo, но мне-то как раз узнать бы причину. Ведь на одном листе работает! Согласен, что код несовершенен, но мне его переписывать нужно хотя бы понимая, в какую сторону. Совсем не прошу "править" код за меня, но может кто сталкивался с проблемами внедрения UDF.
Спасибо за совет, Hugo, но мне-то как раз узнать бы причину. Ведь на одном листе работает! Согласен, что код несовершенен, но мне его переписывать нужно хотя бы понимая, в какую сторону. Совсем не прошу "править" код за меня, но может кто сталкивался с проблемами внедрения UDF.mick-77
Попробовал, но эффект, словно выключил volatile, как советовал Hugo. В принципе, оно и должно было привести к этому, ведь volatile может иметь только true/false, нет? Чёрт его знает, чего ей не хватает.
Попробовал, но эффект, словно выключил volatile, как советовал Hugo. В принципе, оно и должно было привести к этому, ведь volatile может иметь только true/false, нет? Чёрт его знает, чего ей не хватает.mick-77
Может, и не только он. При отсутствии имени листа берется диапазон активного листа. При этом коду очень фиолетово, где вы разместили функцию. Добавьте в аргументы имя листа, глядишь, и будет щастье.
Может, и не только он. При отсутствии имени листа берется диапазон активного листа. При этом коду очень фиолетово, где вы разместили функцию. Добавьте в аргументы имя листа, глядишь, и будет щастье.RAN