Страницы: 1
RSS
Макрос для запуска пользовательской функции
 
Здравствуйте! Никак не врублюсь как сделать так что бы функция запускалась через макрос. Например, есть функция.

Код
Function Пример(Число As String)
Пример = Число * 2
End Function

Как сделать так, что бы ее можно было запустить пи помощи макроса, вот что я пытался:

Код
Sub Ф()
Application.Run "Пример"
End Sub

Function Пример(Число As String)
Пример = Число * 2
End Function

Не получается

Где то в интернете видел такой вариант:
Код
Sub Ф()

Function Пример(Число As String)
Пример = Число * 2
End Sub
Но это вообще какой то бред
 
Надо без кавычек, но с указанием аргумента:
Код
Sub Ф()
    MsgBox Пример(1)
End Sub
 
Function Пример(Число As String)
    Пример = Число * 2
End Function
 
Код
Sub Ф()
  Msgbox Пример(3.5)
End Sub

Function Пример(Число As Double)
  Пример = Число * 2
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
А если в функции будет больше аргументов? пример:
Код
Function Пример(Число As String, Коэффициент as string)
    Пример = (Число * 2) / Коэффициент
End Function
 
Код
Function Пример(Число As String, Коэффициент as string)
Пример = (Число * 2) / Коэффициент
End Function
Изменено: Александр1986 - 20.06.2018 17:53:28
 
Если больше аргументов - с большими и вызываете.
Только вот смысл где? По первому посту его не вижу, далее правда хоть msgbox функцию  использует...
Изменено: Hugo - 20.06.2018 18:06:53
 
при обращении к функции ей нужно дать ВСЕ аргументы, которые она ожидает получить и в том порядке, в котором они перечислены в обьявлении функции

только Ваша функция изначально мертвая!
не возможно умножить Число на 2, а потом разделить на Коэффициент только по тому, что Вы аргументы назвали Число и Коэффициент
тип у обоих  string (строка), со строками не выполняют арифметических операций
понимаете?
"Вася" + "лопата" <> "землекоп"
так же как и
"Вася" * "лопата" <> "трактор"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
А можно сделать так, что бы макрос не выполнял функцию, а вызывал "помощник" функции, например:

[img]file:///C:/Users/USER/Desktop/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82.png/[/img]
 
 
Цитата
Александр1986 написал:
А можно
- можно:
Код
Application.Dialogs(450).Show
 
Hugo, Спасибо!
 
Только сначала:
Код
ActiveCell.Formula = "=Пример()"

а потом:
Код
Application.Dialogs(450).Show

Тогда в диспетчер будет сразу именно нужная функция.
Но чтобы все по уму надо еще предусмотреть и то, что вставка функции может быть отменена - нажата кнопка отмены. Чтобы не записать в ячейку то, что не должно быть записано надо делать как-то так:
Код
Sub InsertUDF()
    Dim s As String
    s = ActiveCell.Formula
    ActiveCell.Formula = "=Пример()"
    If Application.Dialogs(450).Show = False Then
        ActiveCell.Formula = s
    End If
End Sub
Function Пример(Число As String, Коэффициент As String)
    Пример = (Число * 2) / Коэффициент
End Function

конечно, надо еще додумать и про формулы массива, но...Это уже сами.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх