не совсем по теме, но называть переменную именем const, т.е. constant, т.е. постоянная величина - не очень хорошая практика :-)))))))))))))))) Согласен. Помему-то это первый пришедший в голову вариант замены истинного имени переменной kolvo_verikalnih_stoek_osnovnogo_karkasa :)
А по теме. Нагуглилось вот такоеКод - Text [Выбрать]
Sub callSomeProc(i as Integer) Application.Run "proc_" & i End Sub
Не захотело работать :( Я не указал выше, что я ищу код для VBA.Небось у процедуры еще и параметры есть?
Небось у процедуры еще и параметры есть?Вы будете смеяться, но я сомневаюсь, что полностью понял смысл вашего вопроса, так как терминами владею из рук вон плохо. :(
Sub callSomeProc(i As Integer)
i = 2
Application.Run "msg_" & i
End Sub
Public Sub msg_1()
Debug.Print "msg_1"
End Sub
Public Sub msg_2()
Debug.Print "msg_2"
End Sub
Не захотело работать Я не указал выше, что я ищу код для VBA.Так я для VBA и писал. Но не проверял, так как совсем не пишу на VBA.
Так я для VBA и писал. Но не проверял, так как совсем не пишу на VBA.Я чуть выше код привел, у меян не получилось запустить процедуру callSomeProc
А на что ругается?
Sub callSomeProc
dim i As Integer
i = 2
Application.Run "msg_" & i
End SubТогда он пишет что переменная "apllication" не задана.Ну в смысле пишет "Variable not defined" и обводит слово Application ...А если ThisApplication вместо Application?
А если ThisApplication вместо Application?Я щас не могу проверить - домой с работы еду. Но сегодня копался в браузере объектов, не нашел у ThisApplication метода run, правда не помню, попробовал ли ThisApplication в коде написать. Я нашел в браузере свойство VBA.Thisapplication но им также не получилось воспользоваться, и метода run у него тоже не было. Да и вобще, я не нашел ни одного метода run через поиск в объектом бразере. В родном help VBA по запросу "run" находятся статьи, но я не смог в них найти решения :(
нашел еще функцию CallByName (http://support.microsoft.com/kb/186143). Можно ее попробовать, если она доступна в VBA для Inventor.
Подскажите пожалуйста, можно ли скомбинировать необходимое имя, чтобы условно вызвать процедуру с именем "proc_" & varia, вместо того, чтобы писать 20 условий в "if..then..else"Примерно так:
Попробовал достучаться до модуля по принципу: MyProject.MyModule.MyFunction (имена проекта, модуля и функции внутри модуля)
Т.е.
Код - Text: [Выделить]
Call Interaction.CallByName(MyProject.MyModule, MyFunction, VbMethod)
Но он пишет мне "type mismatch" и выделяет в строке MyModule.
вместо того, чтобы писать 20 условий в "if..then..else"Идея и состоит в том, чтобы вызвать процедуру, имя которой сформировано динамически.
Первым параметром надо передать объект, в котором находится вызываемая функция. Если процедуры находятся в том же самом модуле, откуда эти процедуры вызывается, то первым параметром должно стоять Me.Ну не знаю... В моем примере процедура находилась в другом модуле (MyProject.MyModule). С другой стороны, я пробовал на простом примере, что если даже процедура находится в текущем модуле, то обратиться к ней можно не только написав ее имя например Call ProcName, но и написав полный ее путь: Call ProjName.ModuleName.ProcName.
И еще статья Владимира Ананьева: http://adndevblog.typepad.com/manufacturing/2012/07/run-vba-macro-using-inventor-api.html
чем она может помочь в обсуждаемом нами вопросе... не подскажете, что я пропустил?В ней приведено примерно то же, что и в ответе Алексея Романова (http://adn-cis.org/forum/index.php?topic=1823.msg7158#msg7158).
На VBA, да еще и под Inventor... Это будет треш ))) Пинайте, если че :)Чуть выше уже заметили, что это не совсем то, что я ищу.
Цитата: R.I.Chernov от 03-02-2015, 16:18:36
вместо того, чтобы писать 20 условий в "if..then..else"
Идея и состоит в том, чтобы вызвать процедуру, имя которой сформировано динамически.
Примерно так:
*****