se_arts 0 / 0 / 0 Регистрация: 15.10.2016 Сообщений: 91 |
||||||
1 |
||||||
Как задается условие «если ошибка» — #ЗНАЧ!13.03.2018, 10:39. Показов 9610. Ответов 7 Метки нет (Все метки)
Подскажите, пожалуйста, как правильно задается условие «если ошибка»
Вложения
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
13.03.2018, 10:39 |
Ответы с готовыми решениями: Какой функцией задать условие «Если область ячеек пустая» ? Почему ошибка: «Next without for» если For абсолютно точно есть? Sub isColNum() Если str довольно длинная,то выскакивает ошибка «type mismatch» Создать цикл Анализ «что если»-«Подбор параметра.» 7 |
Hugo121 6919 / 2829 / 543 Регистрация: 19.10.2012 Сообщений: 8,644 |
||||
13.03.2018, 10:41 |
2 |
|||
1 |
Казанский 15139 / 6413 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
13.03.2018, 11:52 |
3 |
|||
se_arts, #ЗНАЧ! это CVErr(xlErrValue)
2 |
se_arts 0 / 0 / 0 Регистрация: 15.10.2016 Сообщений: 91 |
||||
13.03.2018, 11:54 [ТС] |
4 |
|||
Hugo121, выдает ошибку
Данные: Кликните здесь для просмотра всего текста 5 6 0 0
0 |
se_arts 0 / 0 / 0 Регистрация: 15.10.2016 Сообщений: 91 |
||||||
13.03.2018, 12:23 [ТС] |
5 |
|||||
Казанский, убрал проверку 2-ого условия (And Cells(i, 5).Value <> «»), попробовал CVErr(xlErrValue) и для любой ошибки Что я неправильно пишу или указываю в коде?
Миниатюры
Вложения
0 |
Vlad999 3866 / 2282 / 765 Регистрация: 02.11.2012 Сообщений: 6,023 |
||||
13.03.2018, 15:16 |
6 |
|||
IsError(Cells(i, 6).Value) не подошел? Добавлено через 1 минуту
1 |
Hugo121 6919 / 2829 / 543 Регистрация: 19.10.2012 Сообщений: 8,644 |
||||
13.03.2018, 22:37 |
7 |
|||
Сообщение было отмечено se_arts как решение РешениеПосмотрел наконец файл — точно xlErrValue нужно:
Добавлено через 1 минуту
1 |
0 / 0 / 0 Регистрация: 15.10.2016 Сообщений: 91 |
|
14.03.2018, 00:09 [ТС] |
8 |
Hugo121, заработало
0 |
Алексей Пользователь Сообщений: 10 |
Коллеги, доброго дня! Не нагуглил решения, пардон, если повтор. НО. Периодически в ячейках, где эта функция используется, появляется ошибка #ЗНАЧ! и убрать её можно только одним способом: Что делать? Ячеек-то много. |
Юрий М Модератор Сообщений: 60912 Контакты см. в профиле |
Алексей, Вам нужно решить некую задачу или выяснить, почему именно Ваша функция так себя ведёт? Если первое, то сформулируйте кратко саму задачу и предложите новое название темы — модераторы поменяют. В обоих случаях нужен небольшой файл-пример. Прикрепите его к первому сообщению Изменено: Юрий М — 17.12.2021 22:01:03 |
Алексей Пользователь Сообщений: 10 |
, за строки пардон — привычка. Моя функция не при чём (тут я уверен не 100%, уже не первый год в VBA), это конкретно поведение экселя. Т.е. даже смысла код приводить нет. К слову — у меня есть пара проектов с совершенно разными функциями, но такой эффект (периодически!) проявляется в обоих. |
vikttur Пользователь Сообщений: 47199 |
#4 17.12.2021 22:15:03
… а примера в теме нет ни одного. |
||
Юрий М Модератор Сообщений: 60912 Контакты см. в профиле |
Алексей, а на какой ответ Вы рассчитываете, не показав пример? Хотите, чтобы форумчание утроили гадание под Новый год? )) |
Алексей Пользователь Сообщений: 10 |
#6 17.12.2021 22:21:54
Боюсь, прикрепляемый пример ничего не даст — эффект проявляется крайне нерегулярно и бессистемно (я пока отследить не смог). Могу попытаться прикрепить видео, где в ячейке с формулой, где фигурирует ошибка «#ЗНАЧ», вводим ту же самую формулу (точнее просто открываем редактирование формулы и тупо жмём Enter), и ошибка исчезает… Из интересного: PS Excel 2016. |
||
Юрий М Модератор Сообщений: 60912 Контакты см. в профиле |
Ребята, я вчера написал макрос. Так вот он, зараза, то правильно сработает, то ошибку выдаёт. Подскажите, в чём может быть проблема? Изменено: Юрий М — 17.12.2021 22:28:36 |
Алексей Пользователь Сообщений: 10 |
Юрий, я написал, что макрос не выдаёт ошибок . Он не пересчитывается экселем, т.е. не вызывается при пересчёте листа, хотя, по логике, должен. Немного почитал теорию пересчёта листов/формул. Похоже, один из вариантов решения — Application.Volatile true, но всё равно странно. Попробую. PS Вот тема с вариантами решений: https://superuser.com/questions/1261444/custom-formula-not-updating Изменено: Алексей — 17.12.2021 22:48:41 |
Юрий М Модератор Сообщений: 60912 Контакты см. в профиле |
#9 17.12.2021 22:49:08
Я могу переформулировать своё предыдущее сообщение, но смысл останется тот же. |
||
Алексей Пользователь Сообщений: 10 |
Думаю, тему можно закрыть. Всем спасибо за активное участие |
Юрий М Модератор Сообщений: 60912 Контакты см. в профиле |
Алексей, опять Вы рвёте сообщение пустыми строками!!! |
Алексей Пользователь Сообщений: 10 |
#12 17.12.2021 22:56:39
Я по пятницам всё делаю не так Уж простите. |
||
Юрий М Модератор Сообщений: 60912 Контакты см. в профиле |
А у меня к пятнице накопилась куча банов. |
БМВ Модератор Сообщений: 21914 Excel 2013, 2016 |
#14 17.12.2021 23:00:12
а Excel c VBA уже десятилетия.
что за бред. Если не меняется значение аргумента, то и пересчет не нужен. Если вы накривокодили на не первом своем году так что даже боитесь показать ваше чудо творение, это не означает что Excel виноват. По вопросам из тем форума, личку не читаю. |
||||
Юрий М Модератор Сообщений: 60912 Контакты см. в профиле |
#15 17.12.2021 23:06:53 Миш, там есть опечатка, но она по делу:
)) |
||
Алексей Пользователь Сообщений: 10 |
#16 17.12.2021 23:10:31 Блин, как в старые добрые времена
Дальше модераторы цепляются к разрывам строк и опечаткам. Чувствуется высокий профессионализм участников форума Можете меня банить, смысла тут находиться не вижу. Ошибся форумам, ошибку признаю |
||
New Пользователь Сообщений: 4801 |
Покажите свой код, не стесняйтесь ) Изменено: New — 17.12.2021 23:21:31 |
vikttur Пользователь Сообщений: 47199 |
#18 17.12.2021 23:22:01
Пока что Вы их надуваете, веря в свою непогрешимость. |
||
Юрий М Модератор Сообщений: 60912 Контакты см. в профиле |
#19 17.12.2021 23:28:16
Вы уже третий, кто так написал за все эти годы. И ни на одном форуме не привествуется отсутствие адекватной реакции на замечания модераторов.
Признали — следует исправить. Вместо «привычка», «по пятницам» следовало просто устранить замечание. |
||||
Алексей Пользователь Сообщений: 10 |
#20 17.12.2021 23:44:15 Тема старая, случай аналогичный, как и ещё 61 таких же (см. I have the same question 61) https://answers.microsoft.com/en-us/msoffice/forum/all/custom-function-incorrectly-returns-value-in-… Люди чинят чем попало. — установка Volatile Adding xxxx=now() to the udf worked for me.
Вы хотите сказать, что у екселя нет глюков? Ой ли… |
||
Алексей Пользователь Сообщений: 10 |
#21 17.12.2021 23:47:28
То есть, ви-таки намекаити, что значение UDF (VBA) целиком и полностью определено аргументами? )) Изменено: Алексей — 17.12.2021 23:47:56 |
||
New Пользователь Сообщений: 4801 |
Алексей, они запрещают мне общаться с вами на «ты» Можно? Изменено: New — 18.12.2021 00:03:53 |
Msi2102 Пользователь Сообщений: 3519 |
Алексей, Вы заходили ради того чего? Что бы убедиться в своей гениальности или доказать это нам, а может просто похамить изволите. Удивительно, что ещё бан не прилетел. Всё таки добрые у нас модераторы. |
Алексей Пользователь Сообщений: 10 |
#24 18.12.2021 00:09:13
Вообще без проблем.
Не спорю. Но смысл хором искать глюки в коде, который даже не вызывается? Очевидно же, что это вопрос обработки событий на листе, который, как бы, немного не в нашей власти. Вот о механизмах его работы, собственно, весь вопрос.
Давайте не будем оффтопить? Равно как и обсуждать ваши «догадки» о моих целях. |
||||||
Msi2102 Пользователь Сообщений: 3519 |
#25 18.12.2021 00:20:40
Значит просто похамить |
||
Юрий М Модератор Сообщений: 60912 Контакты см. в профиле |
Алексей, а что Вы тут до сих пор делаете? Вы же ошиблись форумом. Да и замечания так и не устранили. |
БМВ Модератор Сообщений: 21914 Excel 2013, 2016 |
#27 18.12.2021 09:01:19
Уж лучше ковыряйте в носу, чем тут нести бред. UDF на листе пересчитывается: или по смена аргументов, или в составе формулы, которая должна просчитаться, или при каждом пересчете , если ей это сказано. Но по умолчанию третье не делается чтоб кривые коды не вешали при каждом пересчете приложение и в него не летели камни, мол чудо код прекрасен, а Excel глюкло.
Не чинят, а используют. первое от последнего кстати не отличается. По сути пересчет летучей NOW() аналогичен летучести UDF. Ну и последнее — Если кому то не нравится Excel, напишите свой аналог, более того, включите его в реестр Российского ПО, еще и круто заработаете на импортозамещении. По вопросам из тем форума, личку не читаю. |
||||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14413 Профессиональная разработка приложений для MS Office |
#28 18.12.2021 14:25:05
тут скорее вопрос о незнании механизмов пересчета UDF Без обид, но это реально так. Еще давно написал статью, где кратко описывал этот нюанс с пересчетом и какие есть варианты решений: Обновление расчетов функции пользователя UDF(автопересчет) т.е. UDF никогда видимо и не задумывались как автопересчитываемые функции(по крайней мере не являлись таковыми по умолчанию). Да и вообще UDF имеют и другие недочеты, которые не так очевидны, как может показаться на первый взгляд(например, работа FindNext и т.п.). Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
sokol92 Пользователь Сообщений: 4529 |
Рекомендую очень внимательно прочитать этот текст разработчика. |
БМВ Модератор Сообщений: 21914 Excel 2013, 2016 |
#30 18.12.2021 16:39:40 sokol92, Владимир, приветcтвую. Это я к тому, что не только события в книге, приложении и прочем типа могут требовать пересчета , но уж точно Excel не предположит что там и как. По вопросам из тем форума, личку не читаю. |
|
|
|
Популярные разделы FAQ: Общие вопросы Особенности VBA-кода Оптимизация VBA-кода Полезные ссылки
1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
Пользовательская функция в Excel выдает ошибку #ЗНАЧ!
, не знаю, с какой стороны подступиться
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Здравствуйте. |
Krasnaja Shapka |
|
Full Member Рейтинг (т): 18 |
в пользовательских функциях все зависит от пользователей… какие пользователи — такая и функция.. скажите где в этом абзаце текста информация на основании которой можно найти вашу ошибку? |
Получайник |
|
Я так понимаю, что выкладывать сюда три с лишним страницы кода — это не comme il faut? PS Сообщение отредактировано: Получайник — |
Krasnaja Shapka |
|
Full Member Рейтинг (т): 18 |
ну.. можно ведь и файл выложить? что такое следующий запуск функции? (или «вызов процедуры через пару строк»???) для того чтоб узнать значение public переменной существуют breakpoint’ы, окно watches (не помню как по-русски — у меня не локализированный офис), пошаговое выполнение процедуры/функции (F8) — очень помогает. |
Получайник |
|
Попробую объяснить на свой дилетантский манер… Следующий запуск функции — это, как Вы говорите, «в ячейку вставил — она и пересчитывается», а потом в другую ячейку вставил — она там снова пересчитывается, потом в следующую ячейку и т.д. А вызов через пару строк — это (внутри одной функции) примерно так:
Sub s1() … End Sub Function fun1() … Call s1 … ‘пара строк Call s1 … End Function |
pvr |
|
Junior Рейтинг (т): 9 |
В модуле книги
Public ДолгоживущаяПеременная as Long Private Sub Workbook_Open() ДолгоживущаяПеременная = 0 End Sub В общем модуле
Public Function МояПользовательскаяФункция(r As Range) ThisWorkbook.ДолгоживущаяПеременная = ThisWorkbook.ДолгоживущаяПеременная + 1 МояПользовательскаяФункция = ThisWorkbook.ДолгоживущаяПеременная + 1 End Function А теперь на листе в ячеку «А1» вставьте =МояПользовательскаяФункция(A1) Цитата Krasnaja Shapka @ ну.. можно ведь и файл выложить? Цитата Krasnaja Shapka @ для того чтоб узнать значение public переменной существуют breakpoint’ы, окно watches (не помню как по-русски — у меня не локализированный офис), пошаговое выполнение процедуры/функции (F8) — очень помогает. |
Получайник |
|
А что, непосредственно к сообщению файл прикрепить нельзя? Только выложив на другие сайты? А есть ограничения, на какие сайты можно выкладывать? |
bi-lya |
|
Senior Member Рейтинг (т): 34 |
Непосредственно к сообщению файл прикрепить можно. Для этого или перед вводом сообщения нажмите ссылку «Ответить», или это можно сделать на предварительном просмотре вашего сообщения |
Получайник |
|
Спасибо, bi-lya. |
Получайник |
|
Неужели, никто не может подсказать, в чем дело? |
Krasnaja Shapka |
|
Full Member Рейтинг (т): 18 |
Цитата Получайник @ Все переменные — Public ну и хде они??? ваша функция у меня выдает 0, что вполне логично, ибо в начале стоит проверка на used=0 она не выполняется, программа переходит в конец и функция приравнивается переменной равной нулю. и еще раз повторюсь: Цитата Krasnaja Shapka @ для того чтоб узнать значение public переменной существуют breakpoint’ы, окно watches (не помню как по-русски — у меня не локализированный офис), пошаговое выполнение процедуры/функции (F8) — очень помогает. кстати, это все надо использовать не только из-за public переменных, а постоянно, если хочешь узнать как работает твоя функция |
leo |
|
Все таки видимо дело не в Public (т.к. сама функция Static), а в том, что как отметил pvr, Excel может вызывать функции не в том порядке, в каком ожидает автор, т.е. сначала вызываются функции с used=1 (в независимых ячейках), и только потом с used = 0 (т.к. эта ячейка зависит от других) |
Получайник |
|
Krasnaja Shapka, так в том и проблема, что при в режиме отладки (Debugger) значения переменных правильные и процедура выполняется корректно, а на самом листе Excel’я возникают ошибки. Цитата Krasnaja Shapka @ ну и хде они??? Public, извиняйте, больше нет — я писал о правках, которые были внесены уже после начала данной ветки на форуме. Вместо них я изменил тип функции на Static. Но проблема с тем, что функция выдает ошибку #ЗНАЧ! осталась. Цитата Krasnaja Shapka @ ваша функция у меня выдает 0, что вполне логично, ибо в начале стоит проверка на used=0 она не выполняется, программа переходит в конец и функция приравнивается переменной равной нулю. Да, не спорю. Я же говорил, проблемы начинаются со второй итерации (нажмите 1 раз кнопку F9 и взгляните на результат в оставленных мною ячейках). leo, а есть какой-то стандартный способ контроля над тем, в какой последовательности Excel вызывает функции? PS |
Получайник |
|
Ответьте, пожалуйста, хотя бы на вопрос из постскриптума про Static функцию в случае пересчета вручную. |
Krasnaja Shapka |
|
Full Member Рейтинг (т): 18 |
про static, на сколько я понимаю static переменные будут сохранять свои значения между последовательными вызовами процедуры в которой они описаны… пиши public и не прогадаешь… Цитата Получайник @ в режиме отладки (Debugger) значения переменных правильные и процедура выполняется корректно, а на самом листе Excel’я возникают ошибки.
не верю! (с) станиславский и еще так как результат у тебя зависит от того с какой ячейки excel начинает пересчет значений… то попробуй переписать все используя процедуры например… ибо ты не можешь сказать excel-ю в каком порядке ему все пересчитывать… Сообщение отредактировано: Krasnaja Shapka — |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- VB for Application
- Следующая тема
[ Script execution time: 0,0527 ] [ 16 queries used ] [ Generated: 21.09.23, 18:58 GMT ]
Как обойти значение ячейки #ЗНАЧ! |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Модератор: Naeel Maqsudov
-
DanilK
- Сообщения: 2
- Зарегистрирован: 10 июн 2004, 10:00
- Откуда: Днепропетровск
- Контактная информация:
Приветствую участников форума!
Может кто пояснить мне, как избегать появления ошибки #знач! в Excel?
Ситуация такова: есть сводный файл, в котором собраны ссылки на другие файлы, в основном на сетевых дисках. При его открытии в ячейках стоят числовые значения, как и задумывалось… Однако, если обновить значения исходных файлов, возникает вышеуказанная ошибка… Приходится одновременно со сводным открывать и исходные файлы, тогда все ошибки исчезают, и значения обновляются — то есть смешения форматов ячеек нет!?
Похожая ситуация возникает, если при открытом сводном файле открыть какой либо, даже и не связанный с ним файл Excel — вместо чисел появляются #знач!
Таким образом, процесс работы со сводным файлом «несколько» усложняется, в итоге приходится открывать практически все исходные файлы по цепочке…
Подскажите, если сталкивались с такой ситуацией, как обновлять значения, не открывая все связанные файлы?
Windows 2000 Professional, Excel 2002
-
Naeel Maqsudov
- Сообщения: 2551
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
11 июн 2004, 06:58
1. Приведите текст формулы со ссылкой.
2. В Сервис/Параметры проверьте, чтобы были включены флажки «Обновлять удаленные ссылки» и «Сохранять значения внешних связей»; выключен «Игнорировать DDE-запросы от других приложений».
Сразу при открытии видны числа так как Excel сохраняет не только формулы но и результаты. Проблема в том, что формула с внешней ссылкой не может быть рассчитана (либо из-за некорректной записи самих формул, либо из-за настроек Excel). Ну и я надеюсь, что исходные файлы конечно же не перемещаются ежедневно из одной папки в другую.
-
DanilK
- Сообщения: 2
- Зарегистрирован: 10 июн 2004, 10:00
- Откуда: Днепропетровск
- Контактная информация:
11 июн 2004, 10:27
Naeel Maqsudov
1. Так ведут себя обычно функции, вроде ВПР, СРЗНАЧ, а иногда просто ссылки на ячейку. Пример:
=СУММЕСЛИ(‘M:\Tov_otch 2004\Base\[June.xls]Fact’!$V$2:$V$34;A26;’M:\Tov_otch 2004\Base\[June.xls]Fact’!$O$2:$O$34)
Если просто обновить, то будет #ЗНАЧ!, единственный выход — одновременное открытие связанных файлов…
Причем, там же есть просто ссылка =’M:\Tov_otch 2004\Base\[June.xls]Fact’!$O$39 так вот она обновляется!
Насчет форматов: по вышеуказанной ссылке формат сравниваемых ячеек общий, а ячеек с данными — числовой с 2 десятичными знаками и разделителем групп разрядов
2. В Сервис/Параметры флажки поставлены именно так, как Вы указали
Насчет перемещений файлов: с ними работает очень ограниченный круг работников, понимающих последствия таких действий, но и, насколько я понимаю, их следствием была бы ошибка #ССЫЛКА!
-
Naeel Maqsudov
- Сообщения: 2551
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
16 июн 2004, 02:04
насколько я понимаю, их следствием была бы ошибка #ССЫЛКА!
Нет.
#ССЫЛКА относится к последней части ссылки (за знаком !). Возникает, когда образовалась (в результате модификации формул после удаления/перемещения/добавления диапазонов на листе) ссылка, например, на несуществующую ячейку.
#ЗНАЧ происходит при несоответствии типов (КОРЕНЬ(А1), при текстовом значении в А1) а также при возникновении ошибок несоответствия типов или арифметического переполнения в VBA-функциях. Т.е. связана с невозможностью рассчитать результат выражения. Эта ошибка не связана с внешними ссылками.
По существу проблемы есть следующее предположение:
Так как Excel импользует разные механизмы для доступа к открытым и закрытым книгам, то возможно из-за того, что данная связанная книга имеет слишком большой размер, Excel не может вычислить формулу, сожержащую несколько DDE-запросов, но вычисляет формулу с одним DDE-запросом к ней.
Попробуйте СУММЕСЛИ высчислять три June.xls, т.е. свести все формулы с внешними ссылками к тривиальным ссылкам. Попробуйте уменьшить размер внещних книг. Если эксперименты с уменьшением размера дадут положительный результат, то значит решением проблемы будет только перевоз всего проекта на другую платформу, например, реализовать все в реляционной СУБД.