|
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 41
|
|
Вызов функций с листа прописывание на нем строки с параметрами22.02.2013, 16:17. Показов 3084. Ответов 14
Метки нет (Все метки)
Всем доброго дня.
При усовершенствовании программы встал вопрос как сделать максимально визуализированно и простую в изменении следующую вещь: есть n-функция которые, зависят от фиксированного числа переменных, типа такого: выплата1(человек, ставка_роста_зп, зп, формула1) выплата2(человек, темп_роста_пособия, размер_пособия, формула2) выплата3(человек, темп_роста_пенсии, размер пенсии, формула2) и т.д. в ходе использования программы (1 раз для 1 расчета) входящие переменные могут произвольным образом меняться т.е: выплата1(человек, ставка_роста_зп, зп, формула1()) выплата2(человек, ставка_роста_зп, размер_пособия, формула2()) выплата3(человек, темп_роста_пенсии, размер пенсии, формула1()) (формула-это название еще одной функции которая будет вызываться) Идея 1 заключалась в том, что бы реализовать или таблицу в которой будут прописываться в каждой ячейке название параметра (см вложение 1) но т.к. каждая функция вызывается не 1 раз и может для разного подразделения зависить от разных параметров то выйдет все это более чем громоздко, а хотелось бы сделать программу довольно гибкую в настройках. Второй вариант который, хотелось бы реализовать,но не известно можно ли и как - это вызов функции с помощью прописанного на листе строки, поясню. В какой-то ячейки в чистом виде прописать всю строчку параметров для функции и считать ее целиком и целиком же запихнуть в вызов функции пример: ________________________________________ ___________________________ |1 ячейка | 2ячейка | |__________|____________________________ ___________________________| |Выплата1 | (человек, темп_роста_пенсии, размер пенсии, формула1) | |__________|____________________________ ___________________________| Хотелось бы услышать ваше мнение по поводу таких решений, возможность реализации второго из них (и если можно то как) и ваше идеи о иных способах. заранее благодарю.
0
|
|
| 22.02.2013, 16:17 | |
|
Ответы с готовыми решениями:
14
Вызов скрипта с параметрами скрипта рекурсивно с своими глобальными переменными каждый вызов
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|
| 22.02.2013, 17:33 | |
|
Проблема непонятна, пример свет не пролил...
Обычно формулы так и работают - берут значения параметров из ячеек и возвращают результат. Нужно что-то другое? В любом случае всегда можно написать UDF...
0
|
|
|
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 41
|
|
| 22.02.2013, 17:52 [ТС] | |
|
Вот, я забыла про UDF (VBA пользуюсь как обычным языком программирования который по несчастной случайности должен взаимодействовать с excel, так что такое решение как то в голову не пришло)
вы правы, это все сильно упростит ,я думаю) Добавлено через 49 секунд только интересно как сильно это повлияет на скорость работы... Добавлено через 5 минут хотя нет, если я пропишу это в виде формулы на листе то она мне радостно будет все это рассчитывать в этой ячейке, мне это не нужно, и еще она должна отрабатывать при нажатии клавиши. Добавлено через 4 минуты как программа работает сейчас: есть лист настроек и кнопка 1 подготовка данных ,которая считывает все переменные нужные 2 расчет данных. при запуске отрабатывает некоторое количество функций. надо сделать так что бы параметры функции легко настраивались на главном листе, и что бы все это было наглядно, а так же что бы все эти несчастные функции продолжали отрабатывать лишь в момент нажатия кнопки. задумка была такая что я пишу в одну из клеток полностью строку задания параметров, потом все это радостно считывается и с этими параметрами функция запускается в макросе.
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
||||||
| 22.02.2013, 17:55 | ||||||
|
Ну она должна отрабатывать при изменении параметров (если написать правильно).
В любом случае можно принудительно пересчитать макросом, например
0
|
||||||
|
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 41
|
|
| 22.02.2013, 17:59 [ТС] | |
|
при изменении параметров мне не надо что бы она пересчитывала, надо лишь при нажатии кнопки.
Так вы не знаете можно ли в виде параметра функции подать строку в которой будут прописаны параметры?
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|
| 22.02.2013, 18:06 | |
|
Смотрю пока я отвечал - вопрос уже изменился
![]() Если нужно чтоб формула срабатывала только по нажатию кнопки - проще ВСЁ делать кодом, или использовать эти функции в коде. Ставить их на лист - лишняя головная боль. Имхо. Но возможно есть другие мнения? "можно ли в виде параметра функции подать строку в которой будут прописаны параметры?" - для UDF можно почти всё Да и для обычной функции можно что-то придумать - но анализировать параметры труднее.
0
|
|
|
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 41
|
|
| 22.02.2013, 18:07 [ТС] | |
|
так они и есть в коде, просто для настройки программы надо переодически лесть в код, что бы этого не делать хотелось бы что бы параметра при которых вызывались функции можно было бы настраивать на листе.
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|
| 22.02.2013, 18:16 | |
|
Смутно понимаю, что Вам нужно... Может быть забить в код все возможные варианты, и выбирать нужный перебором до совпадения с тем, что написано на листе?
0
|
|
|
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 41
|
|
| 22.02.2013, 18:23 [ТС] | |
|
нет,это жесть полная т.к. там может быть что угодно.
ну смотрите. вот есть у вас данные по машинам, и вы высчитываете ее стоймость в зависимости от параметров. есть у вас функция которой вы напишете: машина сборка-китай сидение-тряпичное резина-летняя и вам выдаст одну цифру а может быть вам для другой машину нужен расчет сборка-Германия сидение-кожа резина-зимняя и если с типом резины еще можно что то перебором сделать тк их не много вариантов, то вот все возможные комбинации названия стран и типа отделок да еще помножить на резину тут у вас уже будет ТАКАЯ комбинаторика что легче полезть в код и руками все прописать. поэтому мне надо сделать что бы я ручками все вводила, но не в 5 местах в программе, а в 1 месте на листе, для каждой машинки свои параметры и что бы считалось не как только я хоть что то изменю, а когда мне надо, а надо мне по нажатию кнопочки.
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|
| 22.02.2013, 18:33 | |
|
Ну хорошо. Есть база, где всякие зимние летние тряпичные и т.д.
Пишите код, который берёт с листа сборка-китай сидение-тряпичное резина-летняя перебором всех этих строк получает пары значений, далее ищет эти пары в базе и суммирует количество чего-то там... Что-то такое нужно?
0
|
|
|
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 41
|
|
| 22.02.2013, 18:38 [ТС] | |
|
Это реализация, на мой взгляд, не очень элегантная,это раз, два в итоге будет довольно громоздкая как по коду, так и по месту на листе. т.к. для каждого параметра надо будет выделять отдельную ячейку, и не дай бог поменяется количество параметров у функции или изменятся типы данных и тд.
поэтому мне бы хотелось, как я уже писала, одной строкой в 1 ячейке записать полностью все параметры и что бы vba это сожрал и отработал, что бы в коде не пришлось разделять строку на составляющие и скармливать ему все по отдельности ища соответствие написанному в строчке какой то там базе данных. есть функция, я знаю какие ей нужны параметры и я хочу прописать эти параметры на листе,а не в макросе.
0
|
|
|
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
|
||||||
| 23.02.2013, 09:50 | ||||||
|
Я так понимаю, что параметры которые вводите вы знаете как применить в коде и код уже существует.
Тогда вносить параметры в одну ячейку с использованием уникального разделителя, а дальше
x - массив параметров, которые использовать в коде Добавлено через 58 секунд Уппс.. lk - описка, читай -z
0
|
||||||
|
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 41
|
|
| 24.02.2013, 12:55 [ТС] | |
|
Это немного не то, т.к мне надо по названию переменной вызвать функцию, т.е. я на вход функции подаю не значения а названия переменных.
function(x,g(i),m) где x -(1,4567,43152,1321,9876,34235236,8586707 0) -массив g(i)- это название функции которая должна вызываться и в нашей фукции и что то там высчитывать. m- тоже массив. таким образом, как я уже говорила, я передаю не сами переменные а ,ну ссылки что ли...
0
|
|
|
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
|
|
| 24.02.2013, 14:56 | |
|
Пример Ваш практически ничего не объясняет (да и файл без поддержки макросов), да и пояснения не доходчивые, в общем туманность Андромеды и то ясней. Приведи пример в файле и опиши точнее что нужно сделать.
0
|
|
|
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 41
|
|
| 25.02.2013, 11:48 [ТС] | |
|
Программу я вам показать не могу, но постараюсь привести более понятное объяснение. Мне нужно по строке, содержащей имя функции, вызвать эту функцию (известно, что она определена в моем макросе), а также передать ей в качестве параметров значения переменных (также определенных в макросе) по строкам, содержащим их имена (число параметров строго фиксировано и заранее известно).
Добавлено через 19 часов 41 минуту Мне тут подсказали что это можно реализовать с помощью Eval + CallByName. По первости кажется что это должно сработать. Так что, думаю, тема закрыта.
0
|
|
| 25.02.2013, 11:48 | |
|
Помогаю со студенческими работами здесь
15
Перенос значений определенных ячеек активной строки одного листа в определенные ячейки другого листа
ADDODB и вызов ХП с параметрами Вызов процедуры с параметрами Вызов процедуры с параметрами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|