Страницы: 1
RSS
Подбор параметра как Function в VBA
 
Доброго дня, как можно в екселе реализовать подбор параметра не с помощью макроса, а как функцию. Что-то типа "ВСД", она же по такому принципу работает
Написал простенький макрос, как его можно переложить в функцию, чтобы при изменении какого-то параметра в книге менялось значение, все по типу ВСД
Код
Sub IRR()
Range("Disc") = Range("Disc").Value
Range("NPV").GoalSeek Goal:=0, ChangingCell:=Range("Disc")
Range("irr") = Range("Disc").Value
Range("Disc") = "=discrate"

End Sub

P.S. Пытался реализовать с помощью Private Sub Workbook_SheetCalculate(ByVal Sh As Object), не работает выдает ошибку. скан приложил
Изменено: cherryvolk - 05.05.2015 13:09:46
 
Вместо Sub() используйте Function(). Почитайте Создание пользовательских функций
Согласие есть продукт при полном непротивлении сторон
 
Читал, если вместо просто вместо Sub() написать Function() не работает, выдает ошибку #ССЫЛКА, в том и вопрос как это преобразовать правильно в функцию  
Изменено: cherryvolk - 05.05.2015 13:25:37
 
Необходимо подключить надстройку "Пакет анализа - VBA".

Sanja, из функции GoalSeek работать не будет, т.к. там идет изменение других ячеек.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
подключил, что она дает?
если нельзя сделать такую функцию, то как хотя бы сделать с помощью Private Sub Workbook_SheetCalculate(ByVal Sh As Object) без ошибки?
приложил два листа, один с обычным макросом, другой с private sub
 
Цитата
cherryvolk написал: подключил, что она дает?
Прикольно. Ну тогда в поисковике наберите, что она дает и что это вообще такое. Она дает возможность из VBA использовать GoalSeek. Без её подключения Вы и получаете озвученную выше ошибку.

Если ошибка больше не возникает, но что-то выполняется все равно не так - так и пишите с описанием того, что хотите и что должно получиться.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:  Без её подключения Вы и получаете озвученную выше ошибку.
и без ее подключения обычный макрос работает, а private нет
Цитата
Если ошибка больше не возникает, но что-то выполняется все равно не так - так и пишите с описанием того, что хотите и что должно получиться.
ошибка, принтскрин с которой приложен к первому сообщению, все равно возникает, вы можете ее увидеть, если откроете приложенный к моему предыдущему сообщению файл example PrSub.
Описываю проблему. есть макрос
Код
Sub IRR()
Range("Disc") = Range("Disc").Value
Range("NPV").GoalSeek Goal:=0, ChangingCell:=Range("Disc")
Range("irr") = Range("Disc").Value
Range("Disc") = "=discrate"
End Sub
он работает нормально. я хочу, чтобы при пересчете листа макрос запускался сам, для этого хотел написать функцию, не получилось, написал макрос
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Range("Disc") = Range("Disc").Value
Range("NPV").GoalSeek Goal:=0, ChangingCell:=Range("Disc")
Range("irr") = Range("Disc").Value
Range("Disc") = "=discrate"
End Sub
он не работает, выдает такую ошибку


Вопрос к уважаемым форумчанам: как сделать функцию из этого макроса, чтобы само пересчитывалось, если нет, то как сделать, чтобы макрос запускался при пересчете листа, при этом не было ошибки. Файлы с примерами в предыдущем сообщении
Заранее спасибо за помощь
 
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

Application.EnableEvents = 0
Range("Disc") = Range("Disc").Value
Range("NPV").GoalSeek Goal:=0, ChangingCell:=Range("Disc")
Range("irr") = Range("Disc").Value
Range("Disc") = "=discrate"
Application.EnableEvents = 1

End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
божественно! спасибо!
 
и все-таки формулой не получится написать?
 
НЕТ
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
cherryvolk, посмотрите свой # 9 - хорошо получилось? Нет? - тогда исправьте - зачем ВСЁ цитировать?
Страницы: 1
Наверх