|
|
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Всем мое почтение и всем, кто ответит, моя благодарность. Хочу сделать в Экселе две вещи, но боюсь, что он на такое не очень способен. А именно: 1. Указать порядок вычисления ячеек. 2. Обращаясь к юзерской функции из ячейки, передать в нее параметр типа Range. Я действительно слишком много хочу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 12:29:00 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч1. Указать порядок вычисления ячеек. А можно узнать для чего? Вообще думаю что можно, задействуя событие xlCalculate. Владимир Саныч2. Обращаясь к юзерской функции из ячейки, передать в нее параметр типа Range. А в чем собственно проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 12:37:49 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
k-nike Владимир Саныч1. Указать порядок вычисления ячеек. А можно узнать для чего? Вообще думаю что можно, задействуя событие xlCalculate. Владимир Саныч2. Обращаясь к юзерской функции из ячейки, передать в нее параметр типа Range. А в чем собственно проблема? согласен и тоже интересно, для чего нужен пункт 1? Неужели результат может зависеть от порядка вычисления? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 13:01:46 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
1. Есть функция, которая помимо возвращения результата заносит нечто в глобальную переменную. Вторая функция только берет значение из этой переменной и возвращает его (чтобы второй раз не запускать вычисление). И я хочу, чтобы сначала вызывалась первая функция, а потом вторая. А происходит почему-то наоборот (хотя вторая вызывается даже в ячейке, расположенной ниже). 2. Видимо, я просто не знаю синтаксиса. Функция описана так: Function xxx(r As Range) As Integer Обращаюсь так: =xxx(A1:B2) Выдает ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 13:11:24 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч1. Есть функция, которая помимо возвращения результата заносит нечто в глобальную переменную. Вторая функция только берет значение из этой переменной и возвращает его (чтобы второй раз не запускать вычисление). И я хочу, чтобы сначала вызывалась первая функция, а потом вторая. А происходит почему-то наоборот (хотя вторая вызывается даже в ячейке, расположенной ниже). 2. Видимо, я просто не знаю синтаксиса. Функция описана так: Function xxx(r As Range) As Integer Обращаюсь так: =xxx(A1:B2) Выдает ошибку. 1. а если сделать проверку, проведено ли требуемое вычисление или нет. если нет - насильственно провести и поставить флаг, который снимется только когда изменятся влияющие данные (можно отслешивать и по ячейкам). 2. у меня вот так получилось (поместил в обычном модуле): Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 13:18:58 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир СанычВсем мое почтение и всем, кто ответит, моя благодарность. Хочу сделать в Экселе две вещи, но боюсь, что он на такое не очень способен. А именно: 1. Указать порядок вычисления ячеек. 2. Обращаясь к юзерской функции из ячейки, передать в нее параметр типа Range. Я действительно слишком много хочу? не - не много - нормально мы например реализовали виртуальный многопользовательский EXCEL на сервере он может все и как угодно а результаты проецируются на реальные EXCELи подключенных клиентов зверь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 13:21:27 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир СанычВсем мое почтение и всем, кто ответит, моя благодарность. Хочу сделать в Экселе две вещи, но боюсь, что он на такое не очень способен. А именно: 1. Указать порядок вычисления ячеек. 2. Обращаясь к юзерской функции из ячейки, передать в нее параметр типа Range. Я действительно слишком много хочу? 1. косвенно можно реализовать завязавшись на последовательность ссылок. пусть в а1 сидит число, в а2 ваша функция1 и формула в а2 комбинирует типа =ф1(параметр) +а1-а1 в а3 формула =ф2()+а2-а2 должна выстрится последовательность вычисления а1->a2->a3 но я бы думал что-то другое - надо задачу видеть. 2. можно. объявляйте параметр функции как вариант или как рэндж и будет щастье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 13:28:17 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
vbapro1. а если сделать проверку, проведено ли требуемое вычисление или нет. если нет - насильственно провести и поставить флаг, который снимется только когда изменятся влияющие данные (можно отслешивать и по ячейкам). Не получается, потому что таких пар ячеек много. Одним флагом не обойтись. Нужно еще, чтобы сначала вычислялась одна пара (в нужном порядке), потом следующая и т.д. Грубо говоря: A2, A3, B2, B3, C2, C3 и т.д. бабай1. косвенно можно реализовать завязавшись на последовательность ссылок. Да! Похоже, что это оно. Спасибо! Насчет второго вопроса - вроде всё делаю правильно, а не выходит... Сейчас попробую еще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 13:38:06 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
кстати, у Range есть метод .Calculate. иожно отключить пересчет на листе, выполнить расчеты в ячейках в требуемойочередности и включить пересчет листа на автомат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 13:54:44 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир СанычВсем мое почтение и всем, кто ответит, моя благодарность. Хочу сделать в Экселе две вещи, но боюсь, что он на такое не очень способен. А именно: 1. Указать порядок вычисления ячеек. А такой вариант не подойдет? Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 13:56:08 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
vbapro, vkodor Application.Calculation = xlCalculationManual Range("D8").Calculate MsgBox Range("D8") Range("D7").Calculate MsgBox Range("D7") Application.Calculation = xlCalculationAutomatic Большое спасибо, не знал про такие возможности. Очень подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 14:31:49 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир СанычНасчет второго вопроса - вроде всё делаю правильно, а не выходит... Сейчас попробую еще. Понял. Ошибка возникает тогда, когда я пытаюсь что-то заносить в этот рейндж, переданный как параметр. Например: Код: plaintext 1. 2. 3. 4. 5. 6. Так нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 16:09:00 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч Владимир СанычНасчет второго вопроса - вроде всё делаю правильно, а не выходит... Сейчас попробую еще. Понял. Ошибка возникает тогда, когда я пытаюсь что-то заносить в этот рейндж, переданный как параметр. Например: Код: plaintext 1. 2. 3. 4. 5. 6. Так нельзя? хотел найти топик, не нашел. обсуждалось как-то, что пользовательская функция не может менять данных на листе. толmrj возвращать значения себя.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 16:19:27 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
vbaproхотел найти топик, не нашел. обсуждалось как-то, что пользовательская функция не может менять данных на листе. толmrj возвращать значения себя.. Понятно. И как это обойти? Ведь в принципе-то Эксель позволяет менять значения данных программно. Если это нельзя сделать в пользовательской функции, то где? Только в обработчиках событий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 16:31:27 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч Понятно. И как это обойти? вместо функций использовать процедуры Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 16:36:10 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч vbaproхотел найти топик, не нашел. обсуждалось как-то, что пользовательская функция не может менять данных на листе. толmrj возвращать значения себя.. Понятно. И как это обойти? Ведь в принципе-то Эксель позволяет менять значения данных программно. Если это нельзя сделать в пользовательской функции, то где? Только в обработчиках событий? или кнопка.. или пересмотреть концепцию..:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 16:45:15 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
vkodor Владимир Саныч Понятно. И как это обойти? вместо функций использовать процедуры Код: plaintext 1. 2. 3. 4. 5. 6. как это? шутка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 16:46:39 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
vbaproкак это? шутка? Пардон, конечно же "As Interger" - лишнее я имел ввиду это Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 17:27:19 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
vkodorвместо функций использовать процедуры Да, но вызывать-то их откуда? vbaproили кнопка.. или пересмотреть концепцию..:) Ну, пересмотреть всегда можно. Это если действительно Эксель не тянет того, что я вздумал на него взвалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 17:56:34 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч Владимир СанычНасчет второго вопроса - вроде всё делаю правильно, а не выходит... Сейчас попробую еще. Понял. Ошибка возникает тогда, когда я пытаюсь что-то заносить в этот рейндж, переданный как параметр. Например: Код: plaintext 1. 2. 3. 4. 5. 6. Так нельзя? по форме такого сорта функция могла бы быть функцией массива. и возвращать массив значений. (или она не должна явно вызываться из ячейки листа. тогда саб или вычисления на како-нибудь событие. событие придется подобрать или придумать (поместив кнопку на лист, например), иначе там тоже легко можно в цикл попасть без специальных усилий по остановке последовательных событий. ) но по факту, то, что написано, примененное к самому себе выглядит как бесконечный рекурсивный цикл. т.е. прямо так не только нельзя, но и не должно быть льзя. может возникнет желание хоть как-то похожую задачу обрисовать? я хоть не спец не тока по акцессу, а и по екселю тоже не спец, но что-то может быть и сообразилось разумное... а про функции массива посмотри, например, здесь: http://www.sql.ru/forum/actualthread.aspx?tid=369706 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 17:59:16 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч vkodorвместо функций использовать процедуры Да, но вызывать-то их откуда? А откудо надо? можно из реакций Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. можно из модулей Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 18:07:03 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
бабайпо форме такого сорта функция могла бы быть функцией массива. и возвращать массив значений. На самом деле у меня и есть массив. И я думал либо функцией с параметром, сидящей в ячейке, выдергивать из массива в ячейку соответствующий элемент (вопрос 1), либо закидывать значения в ячейки по мере вычисления массива (вопрос 2). Согласен, что результат запуска функции с побочным эффектом может быть непредсказуемым, когда функция вызывается неявным образом и неизвестное количество раз. бабайно по факту, то, что написано, примененное к самому себе выглядит как бесконечный рекурсивный цикл. т.е. прямо так не только нельзя, но и не должно быть льзя. К самому себе я вроде не собирался. :))) бабайможет возникнет желание хоть как-то похожую задачу обрисовать? Учебная программа по морфологии иврита. Есть одна функция, которая строит слово из морфем по известным правилам. Я думал завести массив и в нем по ходу работы функции накапливать комментарии о том, какие правила были задействованы. И тогда бы юзеру выдавалось не только само построенное слово, но и массив комментариев. vkodorможно из модулей И тогда кто будет обращаться к процедурам? В конечном счете все равно либо функции (что запрещено), либо обработчики событий. Или есть еще что-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 18:42:03 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
Владимир СанычУчебная программа по морфологии иврита. Есть одна функция, которая строит слово из морфем по известным правилам. Я думал завести массив и в нем по ходу работы функции накапливать комментарии о том, какие правила были задействованы. И тогда бы юзеру выдавалось не только само построенное слово, но и массив комментариев.Эта функция от чего работает? От генератора случайных чисел или от чего-то, что ей юзер дает? Если генератора случайных чисел и от юзера ей ничего не нужно, то у вас месье проблема :) А если юзер этой функции что-то дает на вход, ну например корень слова, то можно уже сделать событие Worksheet_Change в котором делаем: Код: plaintext 1. 2. 3. Владимир Саныч vkodorможно из модулей И тогда кто будет обращаться к процедурам? В конечном счете все равно либо функции (что запрещено), либо обработчики событий. Или есть еще что-то?Еще можно из объектов лежащих на листе (кнопки, картинки, различные шейпы), можно добавить кнопку в тулбар или в меню, можно нарисовать пользовательскую модальную форму, а можно просто ткнуть Alt+F8 и запустить sub напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 18:53:27 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
White OwlЭта функция от чего работает? От генератора случайных чисел или от чего-то, что ей юзер дает? Юзер дает корень и еще некоторые вещи в определенных ячейках. При изменении значения одной из ячеек функция запускается сама и выдает слово (и комментарии, которые пока еще у меня не работают). Но у меня два режима работы. В одном на листе всего одно слово, исходный материал для него и вычисленные комментарии. Второй режим - отладочный, в нем вычисляется много слов с разными исходными данными, и там комментарии выводить не нужно. Хотелось бы, чтобы одна функция могла работать в обоих режимах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 18:59:38 |
|
||
|
Пытаюсь сделать Эксель умнее, чем он есть?
|
|||
|---|---|---|---|
|
#18+
2 Саныч вероятно вердихт таков будет: если максимальный размер области результата фиксирован, то фикнция массива к етому делу может прикрутиться удачнее саба, инкапсулировав в себе всякого рода очистки. Если фиксированной области для результата не получается, то что-то бегом саб только видно пока. кнопка-педаль типа "вычислить вариантов" должна в твоей задаче смотреться. или можно заложиться на изменения в фиксированной клетке с проверкой запонения прочих. С екселем работаю мало и событий на листах не очень люблю. по памяти - есть там тонкие заморочки с обрывом вычислений при использовании пользовательских волатильных функций. дело прошлое сразу не вспомню и не сформулирую. слушай - у тебя русский на компуктере есть - табличку с рускими буквами твой ексель съест? или латиницей все рисовать? щаз прям малек в заморочке, а вечерком могу попробовать каку пригодну к делу демонстрашку выложил бы может дашь русскую аналогию - каким боком рама к маме прислоняется на примере единственного и множественного прислоняния. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 19:33:53 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=34255652&tid=2183632]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 406ms |

| 0 / 0 |
