Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
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) |
|__________|____________________________ ___________________________|

Хотелось бы услышать ваше мнение по поводу таких решений, возможность реализации второго из них (и если можно то как) и ваше идеи о иных способах.
заранее благодарю.
Вложения
Тип файла: xlsx вариант1.xlsx (8.6 Кб, 7 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.02.2013, 16:17
Ответы с готовыми решениями:

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

Вызов скрипта с параметрами скрипта рекурсивно с своими глобальными переменными каждый вызов
Всем привет, есть скрипт у которого глобальные переменные на весь файл. Хочу запустить этот скрипт с путем к файлу с параметрами для...

Итерационные циклы,Определение и вызов функций,Использование библиотечных функций stdio.h
Помогите решить задания: 1.Дано натуральное число n. Найти разность между первой цифрой этого числа и суммой всех остальных. ...

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
Ну она должна отрабатывать при изменении параметров (если написать правильно).
В любом случае можно принудительно пересчитать макросом, например

Visual Basic
1
2
3
Sub tt()
[a7].Calculate
End Sub
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
Я так понимаю, что параметры которые вводите вы знаете как применить в коде и код уже существует.
Тогда вносить параметры в одну ячейку с использованием уникального разделителя, а дальше
Visual Basic
1
x=Split(cells(1,1),z)
где lk - символ или строка уникального разделителя
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.02.2013, 11:48
Помогаю со студенческими работами здесь

Перенос значений определенных ячеек активной строки одного листа в определенные ячейки другого листа
Добрый день! Создаю простенькую программу для регистрации посетителей. Состоит из трех листов - список посетителей, "форма" для...

Передача значений функций в главную программу, вызов функций
Здравствуйте! Скорее всего, неправильно передаю значения функциям и в главную программу. Помогите найти ошибку! В итоге выводит...

ADDODB и вызов ХП с параметрами
With comm .ActiveConnection = conn .CommandType = adCmdStoredProc .CommandText = "temp" ...

Вызов процедуры с параметрами
в общем туплю жестко но как вызвать процедуру в коде? Public Class Form1 Private SUB procedyra(BYVAL j AS DOUBLE, BYVAL i...

Вызов процедуры с параметрами
Здравствуйте, знаю что вопрос ламерский,но все же.. как в делфе вызвать процедуру события другого объекта с параметрами? то есть у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
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, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru