Заполнение нескольких ячеек при вызове функции(Excel)

Программирование на Visual Basic for Applications
rclarion
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 24.12.2007 (Пн) 15:44

Заполнение нескольких ячеек при вызове функции(Excel)

Сообщение rclarion » 24.12.2007 (Пн) 16:17

Ситуация следующая -
Есть функция которая из рекордсета в цикле записывает значения в соседние с активной ячейки. Эта функция вызывается с формы и нормально отрабатывает.
Если попытаться в ячейку вписать чтото типа =fun(122) то возникает циклическая ошибка. При отладке видно что цикл "не прокручивается" т.е. переменная всегда равна левому граничному значению.

Как иначе можно реальизовать возможность вывода нескольких значений при вызове функции в ячейке?

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

Сообщение KL » 24.12.2007 (Пн) 16:37

А можно посмотреть на код функции? А также задачу и пример поконкретней, лучше ввиде файла :-)
Привет,
KL

rclarion
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 24.12.2007 (Пн) 15:44

Сообщение rclarion » 24.12.2007 (Пн) 17:06

KL писал(а):А можно посмотреть на код функции? А также задачу и пример поконкретней, лучше ввиде файла :-)


Приатачил файлик с функцией
Вложения
test.xls
В первом листе вызываетсяфункция test
(27 Кб) Скачиваний: 83

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

Сообщение KL » 24.12.2007 (Пн) 17:19

ОК. Теперь понятно.

То, что ты пытаешься сделать принципиально невозможно. Формула листа может лишь возвращать значение/я в ячейке, куда она введена и не может создавать, изменять или удалять объекты или их свойства.

В данном случае ты пытаешься с пом. формулы изменить свойство Value ячеек, в которые данная формула не занесена, а также свойства Width и Height.

Есть правда исключения из вышеуказанного правила, но они к этому случаю не относятся.
Привет,
KL

rclarion
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 24.12.2007 (Пн) 15:44

Сообщение rclarion » 02.01.2008 (Ср) 20:02

уважемый MVP из Мадрида -

От столь титулованной особы можно было ожидать указания реального решения (формулы массива) - а не ложного суждения типа я не знаю и значит это невозможно.

Документы на MVP в студию ...

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

Сообщение KL » 02.01.2008 (Ср) 22:01

rclarion писал(а):уважемый MVP из Мадрида -

От столь титулованной особы можно было ожидать указания реального решения (формулы массива) - а не ложного суждения типа я не знаю и значит это невозможно.

Документы на MVP в студию ...


1) Читайте свою постановку задачи и представленную функцию и думайте, чего же не хватило для понимания хода ваших мыслей

2) Удивите меня. Я с готовностью поучусь у вас создавать формулы массива, которые делают все или даже часть из того, что перечисленно ниже (т.е. то, что делает ваша UDF):
- меняет шрифт на жирный
- вводит значения в другие ячейки, в которые сама формула не введена (причем на заранее заданном листе)
- динамически распространяется на нужное кол-во столбцов и строк
- меняет высоту строки
- меняет ширину столбца

3) Формулы массива полностью подпадают под данное мною ранее определение:
- может возвращать значение/я в ячейке, куда она введена
- не может создавать, изменять или удалять объекты или их свойства

4) Когда ваш праведный гнев поутихнет, я с удовольствием поведаю вам о возможностях, преимуществах и недостатках формул массива ;-) Пока-что примите вашу функцию приспособленную под формулу массива:

Код: Выделить всё
Public Function test(ByVal stock_id As Long)
    'Инструкции получения рекордсета, где наверное используется переменная stock_id
    test = rcs.GetRows
    'Инструкции закрытия рекордсета
End Function


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


Вернуться в VBA

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

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

    TopList