Аргумент пользовательской функции с несвязанным диапазоном

Программирование на Visual Basic for Applications
Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Аргумент пользовательской функции с несвязанным диапазоном

Сообщение Calvin » 21.03.2008 (Пт) 12:53

Здраствуйте уважаемые.
Код: Выделить всё
Function MyFunc (MyRange as range)

end function


Если MyRange является несвязанным диапазоном, то ошибка. В чем проблема?
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 21.03.2008 (Пт) 13:03

Текст функции покажи. Скорее всего, ты в нем пытаешься применить что-то, что с несвязными диапазонами не работает. В этом случае надо разбирать MyRange.Areas.
Быть... или не быть. Вот. В чём вопрос?

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 21.03.2008 (Пт) 13:53

Да это я в курсе....даже когда ставишь точку останова в функцию - до нее выполнение программы не доходит.

Мясо напичкать можно любого и с Областями я в курсе....просто попробуй подставить любое, и поймешь, что спотыкается на объявлении аргумента
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 21.03.2008 (Пт) 14:00

У меня прекрасно работает. Ты, случайно, не пытаешься вызвать функцию с листа как =MyFunc(A1;B99)?
Быть... или не быть. Вот. В чём вопрос?

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 21.03.2008 (Пт) 15:22

ну да...именно так и пытаюсь :D , а как правильно?
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 21.03.2008 (Пт) 15:57

Проблема в том, что если из VBA ты можешь вызвать функцию с аргументом в виде одного несвязного диапазона (Union(Range("A1"),Range("B99")), то с листа такое невозможно, там аргументы функции будут восприняты только как n связных диапазонов, а не один несвязный. Соответственно, насколько я понимаю, в определение функции придется добавить несколько Optional аргументов типа Range, т. е. что-то вроде

Function MyFunc(rng1 as Range, Optional rng2 as Range, Optional rng3 as Range)
Быть... или не быть. Вот. В чём вопрос?

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 21.03.2008 (Пт) 16:05

спасибо, я понял
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

Template
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 09.09.2006 (Сб) 18:03

Сообщение Template » 21.03.2008 (Пт) 17:44

=MyFunc((E3;F5:F10;G3))

Код: Выделить всё
Function MyFunc(MyRange As Range) As String
    MyFunc = MyRange.Address
End Function

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 21.03.2008 (Пт) 23:22

Как уже продемонстрировал Template, в формулах Excel, Union передается скобками с разделителем аргументов между диапазонами, а Intersect пробелом вместо разделителя:

=СУММ((A1;B2:D8);(F8;G8;K70:K78;Z2:AA8)) - здесь два аргумента
=СУММ(A1:C5 B2:D10) - здесь один аргумент

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

Template
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 09.09.2006 (Сб) 18:03

Сообщение Template » 22.03.2008 (Сб) 0:04

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


До недавних пор, функция рабочего листа СУММ() и т.п. имела максимальное кол-во аргументов = 30, а с выходом XL2007 их и вовсе стало 255

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 22.03.2008 (Сб) 2:02

Template писал(а):
первый вариант часто используется для обхода ограничения в 25 аргументов в функциях.


До недавних пор, функция рабочего листа СУММ() и т.п. имела максимальное кол-во аргументов = 30, а с выходом XL2007 их и вовсе стало 255


Виноват - описАлся :-)
Привет,
KL

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 24.03.2008 (Пн) 12:14

Спасибо, никогда не использовал такие конструкции - видимо, просто необходимости не возникало. Запомню на всякий случай :)
Быть... или не быть. Вот. В чём вопрос?


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67

    TopList