Комбинирование имени процедуры

Автор Тема: Комбинирование имени процедуры  (Прочитано 13997 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Комбинирование имени процедуры
« Ответ #15 : 04-02-2015, 11:07:17 »
Первым параметром надо передать объект, в котором находится вызываемая функция. Если процедуры находятся в том же самом модуле, откуда эти процедуры вызывается, то первым параметром должно стоять Me.
Ну не знаю... В моем примере процедура находилась в другом модуле (MyProject.MyModule). С другой стороны, я пробовал на простом примере, что если даже процедура находится в текущем модуле, то обратиться к ней можно не только написав ее имя например Call ProcName, но и написав полный ее путь: Call ProjName.ModuleName.ProcName.
Я попробовал использовать "Me" : Call Interaction.CallByName(Me, MyFunction, VbMethod) ... на что VBA мне ответило : "Invalid use of Me keyword". Так что пока тупик ...
П.С. Спасибо всем за советы и идеи, но проверять их работоспособность оперативно не получается, так как я не знаю половины используемых в них операторов :)
Приходится подолгу разбираться. Поэтому отвечаю "небыстро" :(
В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Комбинирование имени процедуры
« Ответ #16 : 04-02-2015, 11:12:20 »
И еще статья Владимира Ананьева: http://adndevblog.typepad.com/manufacturing/2012/07/run-vba-macro-using-inventor-api.html

Спасибо! Но если честно, то я не понял, чем она может помочь в обсуждаемом нами вопросе... не подскажете, что я пропустил?
В программировании я новичок...но ненадолго! ;)

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Комбинирование имени процедуры
« Ответ #17 : 04-02-2015, 11:34:58 »
чем она может помочь в обсуждаемом нами вопросе... не подскажете, что я пропустил?
В ней приведено примерно то же, что и в ответе Алексея Романова.
А именно, нужно найти метод по имени и выполнить его с помощью Call.
Код - Text [Выбрать]
  1. VBA version
  2.  
  3. Private Sub Command1_Click()
  4.   Dim oA As Inventor.Application
  5.   Set oA = GetObject(, "Inventor.Application")
  6.  
  7.   Dim oP As Inventor.InventorVBAProject
  8.  
  9.   For Each oP In oA.VBAProjects
  10.     If oP.Name = "ApplicationProject" Then
  11.       Dim oC As Inventor.InventorVBAComponent
  12.       For Each oC In oP.InventorVBAComponents
  13.         If oC.Name = "Module1" Then
  14.           Dim oM As Inventor.InventorVBAMember
  15.           For Each oM In oC.InventorVBAMembers
  16.             If oM.Name = "MyFunction" Then
  17.               Dim oO As Variant
  18.               Call oM.Execute(oO)
  19.             End If
  20.           Next oM
  21.         End If
  22.       Next oC
  23.     End If
  24.   Next
  25.  
  26. End Sub

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Комбинирование имени процедуры
« Ответ #18 : 04-02-2015, 11:51:50 »
На VBA, да еще и под Inventor... Это будет треш ))) Пинайте, если че :)
Чуть выше уже заметили, что это не совсем то, что я ищу.

Цитата: R.I.Chernov от 03-02-2015, 16:18:36
    вместо того, чтобы писать 20 условий в "if..then..else"

Идея и состоит в том, чтобы вызвать процедуру, имя которой сформировано динамически.

То бишь имя вызываемой процедуры должно состоять из какой-то неизменной части и переменной константы, что-то вроде "Proc_number_" & VariablePart

(update)
П.С. Забыл поблагодарить, на вашем примере я наконец таки разобрался с принципом работы оператора "Select Case". :)
В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Комбинирование имени процедуры
« Ответ #19 : 04-02-2015, 13:17:51 »
Примерно так:
*****

Не стал дублировать код :) Спасибо Алексей, это именно то, что я искал! Спасибо всем, кто принимал участие в обсуждении, вы очень помогли. Лично мне,  "суперпрограммисту", наш диалог добавил знаний не только в данном вопросе, но и еще во многих других :)

П.С. От себя добавлю пояснение для таких же "подкованных" как я парней. В коде Алексея нужно вместо "Проект_приложений" и "Module4" написать имя проекта, в котором находится модуль с процедурой, и имя самого модуля соответственно.
В программировании я новичок...но ненадолго! ;)