Хочу сделать надстройку. Написал свою функцию, с помощью RibbonXMLEditor_5.0 сделал свою панельку, написал макрос который прописывает в активную ячейку мою формулу. Но хочется чтоб макрос прописывал в активную ячейку формулу и активировал окно с аргументами функции, как это сделать, подскажите пожалуйста?!
Код
Function ELECTRO_2015(value)
limit = 100
tar1 = 0.366
tar2 = 0.63
Select Case value
Case 1 To limit
ELECTRO_2015 = value * tar1
Case Is > limit
other = value - limit
ELECTRO_2015 = (limit * tar1) + (other * tar2)
Case Else
ELECTRO_2015 = 0
End Select
End Function
Sub formulaElectro(control As IRibbonControl)
ActiveCell.FormulaR1C1 = "=ELECTRO_2015(" & ActiveCell.Value & ")"
End Sub
Юрий М Ошибка "Compile error: Ambiguous name detected: ELECTRO_2015" Sanja Практически то что нужно, но немного не то. Окно "Мастер функций - шаг 1 из 2", а нужно окно функции ELECTRO_2015 "Аргументы функции"
Если Вам нужно диалоговое окно с полями для ввода аргументов, то я показал - перечислите аргументы в нужном порядке. Пробовали? А ошибка - у Вас уже есть функция с таким именем. Просто поменяйте первую строку по моему образцу. Получится примерно так:
Брррррррр. Ух и запутался, так я в первом посте показывал что у меня есть функция + макрос который при нажатии на кнопку, которая располагается на ленте LTE.xlam в активную ячейку прописывает форулу + активирует окно "Аргументы функции" для этой формулы. Иду пробовать.
Код
Function ELECTRO_2015(value)
Limit = 100
tar1 = 0.366
tar2 = 0.63
Select Case value
Case 1 To Limit
ELECTRO_2015 = value * tar1
Case Is > ліміт
other = value - Limit
ELECTRO_2015 = (Limit * tar1) + (other * tar2)
Case Else
ELECTRO_2015 = 0
End Select
End Function
Sub formulaElectro(control As IRibbonControl)
Application.Dialogs(450).Show
End Sub
Юрий М написал: Вы всё же уточните - Вам нужно получить окно, как на моём скрине?
Да (хоть у меня в формуле только один аргумент, все остальное - константы): 1. Нажимается кнопка на ленте 2. В активную ячейку помещается формула 3. Активируется окно "Аргументы функции" для даной формулы
Пункт 2 , 3 должен выполнятся в макросе:
Код
Sub formulaElectro(control As IRibbonControl)
' КОД ???????????????
End Sub
Юрий М написал: FeD_Lviv написал: меня в формуле только один аргументТогда ничего не понял - одно поле и будет появляться при вызове этой функции... Я уже два раза показывал код своей формулы.
Та пусть одно поле, не важно. Важно как из кода VBA прописать СВОЮ ФОРМУЛУ в активную ячейку, ЗАПУСТИТЬ ОКНО "Аргументы функции" для даной формулы. Вставка формулы:
Хм....... А, Вы можете написать свою любую формулу, и макрос который в ативную ячейку прописывает вашу формулу и активирует окно "Аргументы функции" для даной формулы.
В очередной раз непонятно зачем МАКРОСОМ вставлять ФОРМУЛУ в ячейку. Хоть и пользовательскую. Считайте ВСЁ в макросе и выдавайте результаты на лист. Для ввода нужных значений используйте InputBox.
Согласие есть продукт при полном непротивлении сторон
Доброе время суток Юрий М, а чем код Sanja не подошёл?
Код
Sub formulaElectro(control As IRibbonControl)
ActiveCell.FormulaR1C1 = "=ELECTRO()"
Application.Dialogs(450).Show
End Sub
Ведёт себя так же, как и Application.CommandBars.ExecuteMso "FunctionWizard". К тому же и в 2003 будет работать, в том смысле, что не через callback Ribbon элемента, а как идея алгоритма - предоставить пользователю возможность отредактировать аргументы по-умолчанию после программного ввода функции.
Большое спасибо всем за помощь. Если найдутся люди с такими "интересными идеями":
Код
Sub formulaElectro(control As IRibbonControl)
ActiveCell.FormulaR1C1 = "=ELECTRO_2015()"
Application.Dialogs(450).Show
End Sub
Sanja изначально все правильно сказал, просто мне не хватило ума вставить строку (Application.Dialogs(450).Show) после строки(ActiveCell.FormulaR1C1"=ELECTRO_2015()"