powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel присвоение значения ячейке в пользовательской функции
12 сообщений из 12, страница 1 из 1
Excel присвоение значения ячейке в пользовательской функции
    #37478041
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго здоровья и настроения.

Excel 2003 (11.6355.6360) SP1
На единственном листе книги:
ABCD1=22=23=mega_fail2_(ЯЧЕЙКА("содержимое";A1);ЯЧЕЙКА("содержимое";B1);D1)
Функция определена в стандартном модуле
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Option Explicit
Function mega_fail2_&(ByVal x1&, ByVal x2&, mf As Range)
On Error GoTo FuncErr
    mega_fail2_ = x1 - x2
    mf.Value = x1 + x2

NormExit:
Exit Function

FuncErr:
    MsgBox Err.Source & vbCrLf & Err.Number & vbCrLf & Err.Description
    Resume NormExit
End Function

Больше никаких данных, формул, кода в книге нету. Автопересчет отключен.

При попытке пересчитать лист получаю сообщение
Код: plaintext
1.
2.
3.
VBAProject
 1004 
Application-defined or object-defined error
Значение в [C1] обновляется, в [D1] - нет.

Запускаю в окне отладки
Код: plaintext
1.
?mega_fail2_([A1].value,[B1].value,[D1]) [D1].value
отрабатывает без ошибок, значения в [C1], [D1] обновляются.

Подскажите, кто сколько может, на какие это грабли я наступил.

---------------------------------
Зри в корень! (с) Козьма Прутков
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37478050
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прошения, соврал:
Запускаю в окне отладки
Код: plaintext
1.
?mega_fail2_([A1].value,[B1].value,[D1]) [D1].value
отрабатывает без ошибок, значения в [C1] , [D1] обновляются.[C1] не обновляется, конечно же.
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37478066
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stupid_BOT, функция вовращает значение туда, откуда вызывается.
А в D1 у Вас нет никакой функции. Ошибку вызывает строка:
mf.Value = x1 + x2, поскольку тут налицо попытка менять ячейку, к которой функция не принадлежит. Так же и с функциями листа. Попробуйте написать формулу в А1, к-рая меняла бы значение в пустой ячейке В1.
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37478071
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно так пользоваться(или так же формулами на листе):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Function mega_fail2_&(ByVal x1&, ByVal x2&)
On Error GoTo FuncErr
    mega_fail2_ = x1 - x2
NormExit:
Exit Function

FuncErr:
    MsgBox Err.Source & vbCrLf & Err.Number & vbCrLf & Err.Description
    Resume NormExit
End Function

Public Sub www()
[c1] = mega_fail2_([a1], [b1])
[d1] = mega_fail2_([b1], [a1])
End Sub
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37478110
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuklpStupid_BOT, функция вовращает значение туда, откуда вызывается.
А в D1 у Вас нет никакой функции. Ошибку вызывает строка:
mf.Value = x1 + x2, поскольку тут налицо попытка менять ячейку, к которой функция не принадлежит . Так же и с функциями листа. Попробуйте написать формулу в А1, к-рая меняла бы значение в пустой ячейке В1.
Что вызывает ошибку мне понятно. Для понимания свой обработчик и вставил. Без него Excel при пересчете рисовал сокраментальное #ЗНАЧ! в [C1].
Непонятно почему такое существенное различие при вызовах "из листа" и "из окна отладки".
Ну да Гейтс с ним. Поскольку на данный момент интерес чисто академический.

kuklpМожно так пользоваться(или так же формулами на листе):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Function mega_fail2_&(ByVal x1&, ByVal x2&)
On Error GoTo FuncErr
    mega_fail2_ = x1 - x2
' {skipped}
End Function

Public Sub www()
[c1] = mega_fail2_([a1], [b1])
[d1] = mega_fail2_([b1], [a1])
End Sub
Можно. Но, у меня:
Код: plaintext
1.
2.
3.
4.
5.
Function mega_fail2_&(ByVal x1&, ByVal x2&, mf As Range)
On Error GoTo FuncErr
    mega_fail2_ = x1 - x2
    mf.Value = x1 + x2
' {skipped}
Разница существенная.
Разумеется, можно поизвращаться, - добавить функции параметров. Но как-то это не по фен-шую. Имхо, конечно.
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37478240
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Stupid_BOT]kuklpStupid_BOT, Разница существенная.
Разумеется, можно поизвращаться, - добавить функции параметров. Не надо, это я прозевал(спать хотел).
Код: plaintext
1.
2.
3.
Public Sub www()
    [c1] = mega_fail2_([a1], [b1])
    [d1] = mega_fail2_([b1], -[a1])
End Sub
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37478431
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО, если функция в модуле, то неплохо бы было сделать её Public...
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37478706
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если использовать в коде (а не на листе), то вполне себе работает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Option Explicit

Sub tt()
Dim x
x = mega_fail2_([A1], [B1], [D1])
End Sub

Function mega_fail2_&(ByVal x1&, ByVal x2&, mf As Range)
On Error GoTo FuncErr
    mega_fail2_ = x1 - x2
    mf.Value = x1 + x2

NormExit:
Exit Function

FuncErr:
    MsgBox Err.Source & vbCrLf & Err.Number & vbCrLf & Err.Description
    Resume NormExit
End Function
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37479948
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMИМХО, если функция в модуле, то неплохо бы было сделать её Public...Она и так Public ( If not explicitly specified using Public, Private, or Friend, Function procedures are public by default. )

2 All: спасибо за советы.
Получается, что при вызове функции "из листа" невозможно изменить значение ячейки, переданной этой функции аргументом.

Жаль, у меня ещё столько идей было (с)
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37480118
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stupid_BOT,
дык, я это еще в первом ответе написал.
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37480129
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuklpStupid_BOT,
дык, я это еще в первом ответе написал.Дык, неправда Ваша. В тама Вы только факт констатировали, а не привели аргументированных тынцев на документацию.
...
Рейтинг: 0 / 0
Excel присвоение значения ячейке в пользовательской функции
    #37480214
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kuklpStupid_BOT, функция вовращает значение туда, откуда вызывается.
А в D1 у Вас нет никакой функции. Это что? Я это знаю и пишу об этом. А искать для Вас документацию... Я не библиотекарь, не архивариус:-) Тут уж Вы сами.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel присвоение значения ячейке в пользовательской функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]