Страницы: 1
RSS
Активация окна "Аргументы функции"
 
Хочу сделать надстройку. Написал свою функцию, с помощью 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 

Изменено: FeD_Lviv - 06.04.2015 14:36:22
 
?
Код
Application.Dialogs(450).Show
Согласие есть продукт при полном непротивлении сторон
 
Думаю, что нужно не это)) Может разговор про это?
Код
Function ELECTRO_2015(Limit As Double, tar1 As Double, tar2 As Double)
 
Цитата
FeD_Lviv написал: и активировал окно с аргументами функции
я ответил на это. Решать ТС, что нужнее ;)
Согласие есть продукт при полном непротивлении сторон
 
И я тоже "окно" с аргументами )
 
Юрий М Ошибка "Compile error: Ambiguous name detected: ELECTRO_2015"
Sanja Практически то что нужно, но немного не то. Окно "Мастер функций - шаг 1 из 2", а нужно окно функции ELECTRO_2015 "Аргументы функции"
 
Вот скрин, того что получается и что хотелось бы
Код
Sub formulaElectro(control As IRibbonControl)
    Application.Dialogs(450).Show
End Sub

Пробовал записывать макрос, чтобы увидеть активацию окна в VBA, но макрос всегда в записи выдает уже "готовый результат"
Код
Sub Макрос1()
'
' Макрос1 Макрос
'

'
    ActiveCell.FormulaR1C1 = "=ELECTRO_2015(10)"
End Sub



Изменено: FeD_Lviv - 06.04.2015 19:56:20
 
Если Вам нужно диалоговое окно с полями для ввода аргументов, то я показал - перечислите аргументы в нужном порядке. Пробовали? А ошибка - у Вас уже есть функция с таким именем. Просто поменяйте первую строку по моему образцу. Получится примерно так:
 
Брррррррр. Ух и запутался, так я в первом посте показывал что у меня есть функция + макрос который при нажатии на кнопку, которая располагается на ленте 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



Изменено: FeD_Lviv - 06.04.2015 20:11:19
 
Вы всё же уточните - Вам нужно получить окно, как на моём скрине?
 
Цитата
Юрий М написал: Вы всё же уточните - Вам нужно получить окно, как на моём скрине?
Да (хоть у меня в формуле только один аргумент, все остальное - константы):
1. Нажимается кнопка на ленте
2. В активную ячейку помещается формула
3. Активируется окно "Аргументы функции" для даной формулы

Пункт 2 , 3 должен выполнятся в макросе:
Код
Sub formulaElectro(control As IRibbonControl)
    ' КОД ???????????????
End Sub

Изменено: FeD_Lviv - 06.04.2015 21:44:21
 
Цитата
FeD_Lviv написал: меня в формуле только один аргумент
Тогда ничего не понял - одно поле и будет появляться при вызове этой функции...
 
Юрий М написал:
FeD_Lviv   написал:
меня в формуле только один аргументТогда ничего не понял - одно поле и будет появляться при вызове этой функции...
Я уже два раза показывал код своей формулы.

Та пусть одно поле, не важно. Важно как из кода VBA прописать СВОЮ ФОРМУЛУ в активную ячейку, ЗАПУСТИТЬ ОКНО "Аргументы функции" для даной формулы.
Вставка формулы:
Код
ActiveCell.FormulaR1C1 = "=ELECTRO()"

Запуск окна:
Код
????
Изменено: FeD_Lviv - 06.04.2015 20:26:11
 
Цитата
FeD_Lviv написал:
Я уже два раза показывал код
А я уже два раза не понял)) Подождём более сообразительных ))
 
:( Хм....... А, Вы можете написать свою любую формулу, и макрос который в ативную ячейку прописывает вашу формулу и активирует окно "Аргументы функции" для даной формулы.
 
Вот ТЕПЕРЬ понял)) Я не знаю, как это сделать.
 
Спасибо, Вам, за выдержку. А вот последний пост, может не надо было писать, так бы какая-то надежда была бы :)
 
:D Может быть посмотреть в сторону UserForm - изобразить аналог этого диалогового окна?
Или, раз аргумент один, - вызывать InputBox?
 
В очередной раз непонятно зачем МАКРОСОМ вставлять ФОРМУЛУ в ячейку. Хоть и пользовательскую. Считайте ВСЁ в макросе и выдавайте результаты на лист. Для ввода нужных значений используйте InputBox.
 
Согласие есть продукт при полном непротивлении сторон
 
А имитировать нажатие Shift+F3 при активной ячейке?
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
TheBestOfTheBest написал: имитировать нажатие Shift+F3 при активной ячейке
Похоже, что это то, что нужно!
 
Это нужно?
Код
Application.CommandBars.ExecuteMso "FunctionWizard"
 
Работает)  
 
Доброе время суток
Юрий М, а чем код Sanja не подошёл?
Код
Sub formulaElectro(control As IRibbonControl)
    ActiveCell.FormulaR1C1 = "=ELECTRO()"
    Application.Dialogs(450).Show
End Sub

Ведёт себя так же, как и Application.CommandBars.ExecuteMso "FunctionWizard". К тому же и в 2003 будет работать, в том смысле, что не через callback Ribbon элемента, а как идея алгоритма - предоставить пользователю возможность отредактировать аргументы по-умолчанию после программного ввода функции.
Изменено: Андрей VG - 07.04.2015 02:27:59
 
Большое спасибо всем за помощь. Если найдутся люди с такими "интересными идеями":
Код
Sub formulaElectro(control As IRibbonControl)
    ActiveCell.FormulaR1C1 = "=ELECTRO_2015()"
    Application.Dialogs(450).Show
End Sub

Sanja изначально все правильно сказал, просто мне не хватило ума вставить строку (Application.Dialogs(450).Show) после строки(ActiveCell.FormulaR1C1"=ELECTRO_2015()";)
Страницы: 1
Наверх