Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2010, 23:35   #1
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию Странность с пользовательской функцией

Привет всем.
Я сделал пользовательскую функцию, которая может принимать много аргументов через точку с запятой. По сути, она является просто оберткой для этих аргументов, так как ее смысл состоит в автоматическом помещении формулы в примечание после ввода формулы + это дает возможность автозаполнения. Сама она должна возвращать пустое значение:
Код:
Public Function A(ParamArray Formulas() As Variant) As Variant
A = ""
End Function
И вот иногда возникает глюк - несмотря на то, что функция должна возвращать "", в ячейке появляется ноль, непонятно откуда.
Например, в ячейке формуле было присвоено через Range("..").Formula ="="+A(0;5*C3; C2>=0), но при этом там появился 0, а не "".
Причем эта ошибка возникает не всегда.
В чем может быть дело? Как заставить функцию всегда выдавать "", что бы там ни стояло внутри?
Может, это из-за каких-то ошибок, и надо просто отключить реагирование на ошибки?

Последний раз редактировалось motorway; 23.02.2010 в 23:38.
motorway вне форума Ответить с цитированием
Старый 23.02.2010, 23:44   #2
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

я даже пытаться не буду понять что это за телодвижения и для чего они нужны.

попробуйте определить функцию как String
Dophin вне форума Ответить с цитированием
Старый 23.02.2010, 23:46   #3
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

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

Последний раз редактировалось motorway; 23.02.2010 в 23:49.
motorway вне форума Ответить с цитированием
Старый 23.02.2010, 23:51   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Public Function A(ParamArray Formulas() As Variant) As String
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 23.02.2010, 23:56   #5
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Не работает, увы
motorway вне форума Ответить с цитированием
Старый 24.02.2010, 00:06   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Все варианты работают
Изображения
Тип файла: jpg Функция.jpg (28.9 Кб, 134 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 24.02.2010, 00:08   #7
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Ну само по себе у меня тоже работало, но вот иногда в ячейках появляется 0, когда присваиваешь формуле в ячейке эту формулу с параметрами
Как все-таки присваивать "", если в аргументах стоит сама ячейка? Нужно как-то блокировать этот 0

Последний раз редактировалось motorway; 24.02.2010 в 00:11.
motorway вне форума Ответить с цитированием
Старый 24.02.2010, 00:15   #8
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

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

Public Function A(ParamArray Formulas() As Variant) 
A = ""
End Function
Вот в таком виде почемуто работают функции более стабильно
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 24.02.2010, 00:21   #9
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Попробовал и такой вариант, не помогает
Да, похоже, это наверняка из-за циклич. ссылок. Теперь надо избавиться от этого нуля

Последний раз редактировалось motorway; 24.02.2010 в 00:26.
motorway вне форума Ответить с цитированием
Старый 24.02.2010, 00:59   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

замените
Range("..").Formula ="=" + A(0;5*C3; C2>=0)

на
Range("..").Formula ="=" & A(0;5*C3; C2>=0)

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

Ну и, конечно, как все уже высказались, определите функцию как string

Последний раз редактировалось EducatedFool; 24.02.2010 в 01:03.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странность в условии k1r1ch Общие вопросы Delphi 18 03.11.2009 12:43
Странность POST-запроса Voody Работа с сетью в Delphi 4 21.07.2009 20:39
Написание пользовательской функции. GoreProgrammist Microsoft Office Excel 9 15.07.2009 15:28
String - странность или кривые руки elsin Общие вопросы Delphi 12 29.01.2009 02:17
Получение пользовательской функцией данных с закрытой книги KozakMamaj Microsoft Office Excel 18 22.10.2008 06:55