Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/UDF: не возвращает разное значение на разных листах - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » UDF: не возвращает разное значение на разных листах (Макросы/Sub)
UDF: не возвращает разное значение на разных листах
mick-77 Дата: Воскресенье, 09.02.2020, 17:26 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день!

Создал UDF для подсчёта количества одинаковых вертикальных данных, назовём их рисунками, по столбцам. Образец "рисунка", или аргумент, для поиска указывается в А1.
Столкнулся со следующей проблемой: при работе на нескольких листах, но по тем же столбцам (диапазонам), функция возвращает для всех листов одинаковое значение, еоторое получается на активном листе. Т.е. если происходит изменение аргумента на активном "листе1" и функция возвращает количество найденных таких рисунков, допустим, в столбце В, то в том же месте на листе2 эта функция вернёт это же значение, хотя количество этих "рисунков" там иное.
Это сродни, если бы я делал СУММ разных слагаемых на разных листах, но в одном диапазоне, а сумма возвращалась бы одинаковая...
Удивительно, что на одном листе, но в разных столбцах, функция работает как задумывалось.
Прошу совета, где искать проблему.
Спасибо!

Файл с примером и кодом UDF прикрепил/
К сообщению приложен файл: 8882952.xlsm(40.4 Kb)
 
Ответить
СообщениеДобрый день!

Создал UDF для подсчёта количества одинаковых вертикальных данных, назовём их рисунками, по столбцам. Образец "рисунка", или аргумент, для поиска указывается в А1.
Столкнулся со следующей проблемой: при работе на нескольких листах, но по тем же столбцам (диапазонам), функция возвращает для всех листов одинаковое значение, еоторое получается на активном листе. Т.е. если происходит изменение аргумента на активном "листе1" и функция возвращает количество найденных таких рисунков, допустим, в столбце В, то в том же месте на листе2 эта функция вернёт это же значение, хотя количество этих "рисунков" там иное.
Это сродни, если бы я делал СУММ разных слагаемых на разных листах, но в одном диапазоне, а сумма возвращалась бы одинаковая...
Удивительно, что на одном листе, но в разных столбцах, функция работает как задумывалось.
Прошу совета, где искать проблему.
Спасибо!

Файл с примером и кодом UDF прикрепил/

Автор - mick-77
Дата добавления - 09.02.2020 в 17:26
Hugo Дата: Воскресенье, 09.02.2020, 18:14 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2890
Репутация: 644 ±
Замечаний: 0% ±

Добрый день.
Если отключить Application.Volatile True, то влияние пропадает. Почему - не знаю... Но и автопересчёта нет, ибо влияющие ячейки не указаны в аргументах. Я бы переписал механизм, заодно и код бы упростился. Но это только совет :)


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
СообщениеДобрый день.
Если отключить Application.Volatile True, то влияние пропадает. Почему - не знаю... Но и автопересчёта нет, ибо влияющие ячейки не указаны в аргументах. Я бы переписал механизм, заодно и код бы упростился. Но это только совет :)

Автор - Hugo
Дата добавления - 09.02.2020 в 18:14
mick-77 Дата: Воскресенье, 09.02.2020, 18:41 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Почему - не знаю...


:)
Спасибо за совет, Hugo, но мне-то как раз узнать бы причину. Ведь на одном листе работает!
Согласен, что код несовершенен, но мне его переписывать нужно хотя бы понимая, в какую сторону.
Совсем не прошу "править" код за меня, но может кто сталкивался с проблемами внедрения UDF.
 
Ответить
Сообщение
Почему - не знаю...


:)
Спасибо за совет, Hugo, но мне-то как раз узнать бы причину. Ведь на одном листе работает!
Согласен, что код несовершенен, но мне его переписывать нужно хотя бы понимая, в какую сторону.
Совсем не прошу "править" код за меня, но может кто сталкивался с проблемами внедрения UDF.

Автор - mick-77
Дата добавления - 09.02.2020 в 18:41
Dmitriy_37 Дата: Воскресенье, 09.02.2020, 20:18 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010
mick-77, Добрый день!
Попробуйте заменить на
[vba]
Код
Application.Volatile (RangeForSearch)
[/vba]
 
Ответить
Сообщениеmick-77, Добрый день!
Попробуйте заменить на
[vba]
Код
Application.Volatile (RangeForSearch)
[/vba]

Автор - Dmitriy_37
Дата добавления - 09.02.2020 в 20:18
mick-77 Дата: Понедельник, 10.02.2020, 19:18 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Попробуйте заменить на...

Попробовал, но эффект, словно выключил volatile, как советовал Hugo.
В принципе, оно и должно было привести к этому, ведь volatile может иметь только true/false, нет?
Чёрт его знает, чего ей не хватает.
 
Ответить
Сообщение
Попробуйте заменить на...

Попробовал, но эффект, словно выключил volatile, как советовал Hugo.
В принципе, оно и должно было привести к этому, ведь volatile может иметь только true/false, нет?
Чёрт его знает, чего ей не хватает.

Автор - mick-77
Дата добавления - 10.02.2020 в 19:18
RAN Дата: Понедельник, 10.02.2020, 19:52 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 5251
Репутация: 1054 ±
Замечаний: 0% ±

2010
Чёрт его знает, чего ей не хватает.

Может, и не только он.
При отсутствии имени листа берется диапазон активного листа. При этом коду очень фиолетово, где вы разместили функцию. Добавьте в аргументы имя листа, глядишь, и будет щастье.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Чёрт его знает, чего ей не хватает.

Может, и не только он.
При отсутствии имени листа берется диапазон активного листа. При этом коду очень фиолетово, где вы разместили функцию. Добавьте в аргументы имя листа, глядишь, и будет щастье.

Автор - RAN
Дата добавления - 10.02.2020 в 19:52
Pelena Дата: Понедельник, 10.02.2020, 20:15 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 15238
Репутация: 3340 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Добавьте в аргументы имя листа
или прямо в код
К сообщению приложен файл: 9530762.xlsm(39.7 Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
Добавьте в аргументы имя листа
или прямо в код

Автор - Pelena
Дата добавления - 10.02.2020 в 20:15
Dmitriy_37 Дата: Понедельник, 10.02.2020, 20:43 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010
ведь volatile может иметь только true/false, нет?

Оказывается нет, вот статья https://docs.microsoft.com/ru-ru....ulation
 
Ответить
Сообщение
ведь volatile может иметь только true/false, нет?

Оказывается нет, вот статья https://docs.microsoft.com/ru-ru....ulation

Автор - Dmitriy_37
Дата добавления - 10.02.2020 в 20:43
mick-77 Дата: Понедельник, 10.02.2020, 21:47 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
RAN, спасибо за посыл! Я начал копать в сторону Application.Caller и т.д.

Pelena, спасибо огромное за прямое указание, где это должно быть! Буду искать по этой теме информацию и учить.

Dmitriy_37, спасибо за статью! В поисках ответа натыкался на неё, но не придал значения, т.к. думал, что загвоздка в чём-то в другом.
 
Ответить
СообщениеRAN, спасибо за посыл! Я начал копать в сторону Application.Caller и т.д.

Pelena, спасибо огромное за прямое указание, где это должно быть! Буду искать по этой теме информацию и учить.

Dmitriy_37, спасибо за статью! В поисках ответа натыкался на неё, но не придал значения, т.к. думал, что загвоздка в чём-то в другом.

Автор - mick-77
Дата добавления - 10.02.2020 в 21:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » UDF: не возвращает разное значение на разных листах (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2020 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!