задание аргумента функции, вызываемой из процедуры...

Программирование на Visual Basic for Applications
noxs
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 05.01.2004 (Пн) 14:23

задание аргумента функции, вызываемой из процедуры...

Сообщение noxs » 07.02.2004 (Сб) 16:46

Привет всем.

Нужно:

в vbe написать процедуру
Код: Выделить всё
s()
которая вызывает функцию
Код: Выделить всё
f(R as Range)


Предполагаемое использование:

пользователь на данном листе выделяет одну активную ячейку (в нее будет записан результат работы процедуры), нажимает alt+f8 (вызов процедуры), после вызова процедуры пользователю должна быть предоставлена возможность задать
Код: Выделить всё
R
(прямоугольная матрица)--аргумент функции
Код: Выделить всё
f


Вопрос:

как пользователю предоставить возможность задать прямоугольную матрицу?

например, можно ли вызвать менюшку задания аргумента функции, которая появляется при вызове любой встроенной excel-вской функции?

надеюсь мой вопрос понятно сформулирован, спасибо

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.02.2004 (Вс) 5:33

Вообще, диалог с юзером осуществляется через UserForm. Но раз аргумент единственный, то тогда пусть юзер сначала выделяет диапазон на листе, а потом вызывает макрос s:
Код: Выделить всё
sub s()
  f selection
end sub

sub f(byval r as excel.range)
  'чего-то делаем с R
end sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

noxs
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 05.01.2004 (Пн) 14:23

Сообщение noxs » 08.02.2004 (Вс) 14:22

GSerg писал(а):Вообще, диалог с юзером осуществляется через UserForm. Но раз аргумент единственный, то тогда пусть юзер сначала выделяет диапазон на листе, а потом вызывает макрос


ответ понятен, спасибо,
правда не ясна вот эта строчка
Код: Выделить всё
  f selection


ОДНАКО:

предполагалось, что пользователь выбирает ячейку, в которой будет впоследствие отображен результат работы процедуры (в процедуре это может быть реализовано например через ActiveCell), но если он после этого будет задавать аргумент функции через Selection, то ячейка, в которую будет сохраняться результат работы процедуры уже не будет активной.

Есть еще идеи? Или я чего-то не поняла?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.02.2004 (Пн) 9:41

f selection - это вызов процедуры F с параметром Selection :)

Если нужно результат помещать в одну ячейку, а аргумент диапазонный, то не проще ли написать единственную функцию F(byval r as excel.range), а вызывать её как встроенную функцию листа? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

noxs
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 05.01.2004 (Пн) 14:23

Сообщение noxs » 09.02.2004 (Пн) 11:25

GSerg писал(а):Если нужно результат помещать в одну ячейку, а аргумент диапазонный, то не проще ли написать единственную функцию F(byval r as excel.range), а вызывать её как встроенную функцию листа? :)


к сожалению нет, поскольку мне нужно в зависимости от значения функции раскрашивать это значение в разные цвета :( , а функция не может изменять ячейку

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 09.02.2004 (Пн) 11:37

Да ну, неужели не может? А как же доступ через Sheet.Cells(i,j)?

noxs
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 05.01.2004 (Пн) 14:23

Сообщение noxs » 09.02.2004 (Пн) 14:08

RayShade писал(а):Да ну, неужели не может? А как же доступ через Sheet.Cells(i,j)?


сорри, за мою неграмотность в vb, я только учусь :oops: и все свои знания беру из статей msdn и многочисленных форумов

нельзя ли привести коротенький, но полный пример функции, подтверждающий ваш ответ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.02.2004 (Пн) 16:56

А формат-условное форматирование не подходит? :)
2 RayShade: функциям листа запрещено менять лист :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

noxs
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 05.01.2004 (Пн) 14:23

Сообщение noxs » 09.02.2004 (Пн) 17:20

GSerg писал(а):А формат-условное форматирование не подходит? :)


а можно пояснить свою мысль наглядно :shock:, чувствую себя такой не продвинутой :D

код говорит лучше всяких объяснений :D

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.02.2004 (Пн) 17:34

Поясняю наглядно :)
Код:
Вложения
Untitled-1.zip
(3.09 Кб) Скачиваний: 52
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в VBA

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

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

    TopList