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

Вход

Регистрация

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

 

= Мир MS Excel/В функцию VBA не передаются значения ячейки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » В функцию VBA не передаются значения ячейки (Макросы/Sub)
В функцию VBA не передаются значения ячейки
neonar Дата: Пятница, 27.10.2023, 16:29 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 54
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день,
Мной была написана пользовательская функция VBA: v_Hd (cм. прилагаемый файл, модуль Module1)
в качестве аргументов функции в том числе были заданы параметры D, t.

При попытке использовать эту функцию на листе Excel (см. Лист 1, ячейка E3 в прилагаемом файле), этим аргументам не присваиваются
значения из ячеек, которые в качестве ссылки использованы в формуле. Это видно в отладчике
Всем аргументам (D, t) присваивается 0. В чем ошибка?
Заранее благодарю!
К сообщению приложен файл: 3882794.png (48.1 Kb) · dlja_analiza.xlsm (54.8 Kb)


Сообщение отредактировал neonar - Пятница, 27.10.2023, 16:30
 
Ответить
СообщениеДобрый день,
Мной была написана пользовательская функция VBA: v_Hd (cм. прилагаемый файл, модуль Module1)
в качестве аргументов функции в том числе были заданы параметры D, t.

При попытке использовать эту функцию на листе Excel (см. Лист 1, ячейка E3 в прилагаемом файле), этим аргументам не присваиваются
значения из ячеек, которые в качестве ссылки использованы в формуле. Это видно в отладчике
Всем аргументам (D, t) присваивается 0. В чем ошибка?
Заранее благодарю!

Автор - neonar
Дата добавления - 27.10.2023 в 16:29
i691198 Дата: Пятница, 27.10.2023, 19:45 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 218
Репутация: 85 ±
Замечаний: 0% ±

Это видно в отладчике

Для того, чтобы увидеть в отладчике, какие значения имеют аргументы нужно заставить функцию сработать и в какой то момент сделать прерывание. Вся ваша функция состоит из одного оператора присваивания значения функции, вот перед ней поставьте оператор Stop. Чтобы функция сработала нужно изменить значение какого то аргумента, или просто нажать клавишу F9. Вот тогда и смотрите в отладчике, какие значения имеют аргументы.
 
Ответить
Сообщение
Это видно в отладчике

Для того, чтобы увидеть в отладчике, какие значения имеют аргументы нужно заставить функцию сработать и в какой то момент сделать прерывание. Вся ваша функция состоит из одного оператора присваивания значения функции, вот перед ней поставьте оператор Stop. Чтобы функция сработала нужно изменить значение какого то аргумента, или просто нажать клавишу F9. Вот тогда и смотрите в отладчике, какие значения имеют аргументы.

Автор - i691198
Дата добавления - 27.10.2023 в 19:45
neonar Дата: Пятница, 27.10.2023, 20:21 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 54
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я итак сделал прерывание функции это видно на скриншоте, там же видно что значение аргумента D=0, а не 250.
Я умею пользоваться отладчиков, вопрос был в другом.
Функция состоит из одного оператора для упрощения, чтобы не загружать участников форума. Реальная функция выглядит более сложно.
Это никак не влияет на суть вопроса.
 
Ответить
СообщениеЯ итак сделал прерывание функции это видно на скриншоте, там же видно что значение аргумента D=0, а не 250.
Я умею пользоваться отладчиков, вопрос был в другом.
Функция состоит из одного оператора для упрощения, чтобы не загружать участников форума. Реальная функция выглядит более сложно.
Это никак не влияет на суть вопроса.

Автор - neonar
Дата добавления - 27.10.2023 в 20:21
i691198 Дата: Пятница, 27.10.2023, 20:50 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 218
Репутация: 85 ±
Замечаний: 0% ±

Я итак сделал прерывание функции

Не в том месте, если желтым цветом выделена строка, значит она не выполнена, и значения параметров не переданы аргументам.
К сообщению приложен файл: 8837959.png (83.9 Kb)
 
Ответить
Сообщение
Я итак сделал прерывание функции

Не в том месте, если желтым цветом выделена строка, значит она не выполнена, и значения параметров не переданы аргументам.

Автор - i691198
Дата добавления - 27.10.2023 в 20:50
neonar Дата: Пятница, 27.10.2023, 21:09 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 54
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Переданы
К сообщению приложен файл: 2944379.png (126.7 Kb)


Сообщение отредактировал neonar - Пятница, 27.10.2023, 21:10
 
Ответить
СообщениеПереданы

Автор - neonar
Дата добавления - 27.10.2023 в 21:09
neonar Дата: Пятница, 27.10.2023, 21:28 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 54
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Странно, у меня другой результат. У меня excel 2021. А у вас какой? Просто была такая же проблема у меня,
помогло закрытие-открытие файла. А сейчас такое не помогает.
К сообщению приложен файл: 2195411.png (37.5 Kb)
 
Ответить
СообщениеСтранно, у меня другой результат. У меня excel 2021. А у вас какой? Просто была такая же проблема у меня,
помогло закрытие-открытие файла. А сейчас такое не помогает.

Автор - neonar
Дата добавления - 27.10.2023 в 21:28
i691198 Дата: Пятница, 27.10.2023, 21:52 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 218
Репутация: 85 ±
Замечаний: 0% ±

У меня 2016, но это никак не должно влиять на результат. Могу только предположить, что у вас эта функция используется не только в этой ячейке и где то эти параметры равны 0.
 
Ответить
СообщениеУ меня 2016, но это никак не должно влиять на результат. Могу только предположить, что у вас эта функция используется не только в этой ячейке и где то эти параметры равны 0.

Автор - i691198
Дата добавления - 27.10.2023 в 21:52
neonar Дата: Пятница, 27.10.2023, 22:53 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 54
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я скачал этот же свой файл из 1 поста, что и вы и на нем тестировал. В этом файле только одна функция я его сделал для того чтобы выложить на форум


Сообщение отредактировал neonar - Суббота, 28.10.2023, 09:42
 
Ответить
СообщениеЯ скачал этот же свой файл из 1 поста, что и вы и на нем тестировал. В этом файле только одна функция я его сделал для того чтобы выложить на форум

Автор - neonar
Дата добавления - 27.10.2023 в 22:53
VovaK Дата: Суббота, 28.10.2023, 20:44 | Сообщение № 9
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
neonar, Вы не написали к сожалению функцию. Ваша функция не рассчитывает значения а присваивает константу 2.

На будущее не присваивайте переменным имена на кириллице, тем более с такими длинными похожими именами.
Вторая функция будет выдавать всегда пустое значение.

Удачи.


Всем удачи. У нас все получится.
С уважением, Владимир.


Сообщение отредактировал VovaK - Суббота, 28.10.2023, 20:46
 
Ответить
Сообщениеneonar, Вы не написали к сожалению функцию. Ваша функция не рассчитывает значения а присваивает константу 2.

На будущее не присваивайте переменным имена на кириллице, тем более с такими длинными похожими именами.
Вторая функция будет выдавать всегда пустое значение.

Удачи.

Автор - VovaK
Дата добавления - 28.10.2023 в 20:44
neonar Дата: Суббота, 28.10.2023, 21:56 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 54
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
VovaK, функция v_Hd нормальная, просто она не использует аргументы для возвращаемого значения.
Но значения аргументам должны присваиваться в любом случае. Если я напишу функцию реальную, то результат будет такой же
D=0, t=0.

Функция УдалитьСимволы работает корректно к ней нет у меня вопросов никаких. Писал много функций на кириллице, никогда
из-за этого не было проблем и сейчас нет. Это ваше субъективное мнение.


Сообщение отредактировал neonar - Суббота, 28.10.2023, 21:56
 
Ответить
СообщениеVovaK, функция v_Hd нормальная, просто она не использует аргументы для возвращаемого значения.
Но значения аргументам должны присваиваться в любом случае. Если я напишу функцию реальную, то результат будет такой же
D=0, t=0.

Функция УдалитьСимволы работает корректно к ней нет у меня вопросов никаких. Писал много функций на кириллице, никогда
из-за этого не было проблем и сейчас нет. Это ваше субъективное мнение.

Автор - neonar
Дата добавления - 28.10.2023 в 21:56
doober Дата: Воскресенье, 29.10.2023, 00:21 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Функция v_Hd вызывается минимум 2 раза из за формул в ячейках, которые являются параметрами
Выведите в дебаг входные параметры и все увидите
К сообщению приложен файл: 7123582.png (10.8 Kb)




Сообщение отредактировал doober - Воскресенье, 29.10.2023, 00:26
 
Ответить
СообщениеФункция v_Hd вызывается минимум 2 раза из за формул в ячейках, которые являются параметрами
Выведите в дебаг входные параметры и все увидите

Автор - doober
Дата добавления - 29.10.2023 в 00:21
neonar Дата: Воскресенье, 29.10.2023, 00:48 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 54
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
doober, да вы правы, но почему? записана только один раз в ячейку E3
 
Ответить
Сообщениеdoober, да вы правы, но почему? записана только один раз в ячейку E3

Автор - neonar
Дата добавления - 29.10.2023 в 00:48
Gustav Дата: Воскресенье, 29.10.2023, 04:57 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2733
Репутация: 1136 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Функция работает нормально. Что в неё приходит, то она и выводит в отладчик. И на первом "шаге" в нее действительно приходят нули в параметры D и t, так как соответствующие ячейки K3 и L3 в этот момент имеют пустые значения! Прикольно, да?

А имеют они их таковыми из-за того, что в них пересчитываются формулы с функциями ВПР, к тому же завязанные друг на друга (ячейка L3 зависит от K3), да еще и содержащие в своем составе волатильные (летучие) функции ДВССЫЛ, которые вообще пересчитываются при каждом "чихе" в таблице (текст формул см. ниже в P.S.).

И вот по внутренним алгоритмам пересчета ячеек - это, пожалуйста, в Силиконовую долину, к вреднюгам из Майкрософта. Только они смогут провести вас по этим закоулкам промежуточных вычислений, пока Excel пересчитывает формулы и пока в левом нижнем углу окна не загорелся индикатор "ГОТОВО". Хотя они, в общем-то, и не обязаны ничего объяснять про промежутки, пока процесс пересчета не завершен. Понятно, что 100 формул, грубо говоря, так или иначе пересчитываются последовательно друг за другом, хотя нам кажется, что всё пересчиталось мгновенно и одновременно. Всегда можно поставить точку прерывания где-то посредине процесса так, что первые 50 формул уже пересчитались, а оставшиеся 50 - еще нет. Конечно, в этот момент "незаконченности" могут быть какие-то врЕменные шероховатости и нестыковки между первой и второй половиной.

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

Вот мой вид функции, демонстрирующий начальную пустоту ячеек K3 и L3, значения которых идут как нули во входные параметры D и t:
[vba]
Код
Public Function v_Hd(Dy As Integer, D As Single, t As Single, i As Single, Qp As Single, material As String, flag As Integer)

v_Hd = 2
Debug.Print "K3=", [K3].Value, "L3=", [L3].Value
Debug.Print Dy, D, t, i, Qp
Debug.Print material, flag

End Function
[/vba]

Вывод в Окно отладки:
[vba]
Код
K3=                         L3=           
250           0             0             3             28,8
Корсис DN/OD   1
K3=            250          L3=            17
250           250           17            3             28,8
Корсис DN/OD   1
[/vba]

P.S. А формулы в рассмотренных выше ячейках K3 и L3 соответственно такие:
Код
=ВПР($J3;ДВССЫЛ(Q3);2;)

Код
=ВПР($K3;ДВССЫЛ(Q3);3;)


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 29.10.2023, 05:24
 
Ответить
СообщениеФункция работает нормально. Что в неё приходит, то она и выводит в отладчик. И на первом "шаге" в нее действительно приходят нули в параметры D и t, так как соответствующие ячейки K3 и L3 в этот момент имеют пустые значения! Прикольно, да?

А имеют они их таковыми из-за того, что в них пересчитываются формулы с функциями ВПР, к тому же завязанные друг на друга (ячейка L3 зависит от K3), да еще и содержащие в своем составе волатильные (летучие) функции ДВССЫЛ, которые вообще пересчитываются при каждом "чихе" в таблице (текст формул см. ниже в P.S.).

И вот по внутренним алгоритмам пересчета ячеек - это, пожалуйста, в Силиконовую долину, к вреднюгам из Майкрософта. Только они смогут провести вас по этим закоулкам промежуточных вычислений, пока Excel пересчитывает формулы и пока в левом нижнем углу окна не загорелся индикатор "ГОТОВО". Хотя они, в общем-то, и не обязаны ничего объяснять про промежутки, пока процесс пересчета не завершен. Понятно, что 100 формул, грубо говоря, так или иначе пересчитываются последовательно друг за другом, хотя нам кажется, что всё пересчиталось мгновенно и одновременно. Всегда можно поставить точку прерывания где-то посредине процесса так, что первые 50 формул уже пересчитались, а оставшиеся 50 - еще нет. Конечно, в этот момент "незаконченности" могут быть какие-то врЕменные шероховатости и нестыковки между первой и второй половиной.

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

Вот мой вид функции, демонстрирующий начальную пустоту ячеек K3 и L3, значения которых идут как нули во входные параметры D и t:
[vba]
Код
Public Function v_Hd(Dy As Integer, D As Single, t As Single, i As Single, Qp As Single, material As String, flag As Integer)

v_Hd = 2
Debug.Print "K3=", [K3].Value, "L3=", [L3].Value
Debug.Print Dy, D, t, i, Qp
Debug.Print material, flag

End Function
[/vba]

Вывод в Окно отладки:
[vba]
Код
K3=                         L3=           
250           0             0             3             28,8
Корсис DN/OD   1
K3=            250          L3=            17
250           250           17            3             28,8
Корсис DN/OD   1
[/vba]

P.S. А формулы в рассмотренных выше ячейках K3 и L3 соответственно такие:
Код
=ВПР($J3;ДВССЫЛ(Q3);2;)

Код
=ВПР($K3;ДВССЫЛ(Q3);3;)

Автор - Gustav
Дата добавления - 29.10.2023 в 04:57
neonar Дата: Воскресенье, 29.10.2023, 11:41 | Сообщение № 14
Группа: Пользователи
Ранг: Участник
Сообщений: 54
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Понятно, спасибо
 
Ответить
СообщениеПонятно, спасибо

Автор - neonar
Дата добавления - 29.10.2023 в 11:41
Мир MS Excel » Вопросы и решения » Вопросы по VBA » В функцию VBA не передаются значения ячейки (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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