|   |   | 
| 
 | Вызов функции класса при помощи Application.Run в VBA | ☑ | ||
|---|---|---|---|---|
| 0
    
        ШтушаКутуша 22.03.12✎ 20:07 | 
        Есть код функции в классе  
  Public Function GetUsr() as string GetUsr="!!!!" end Function и надо эту функцию "GetUsr" вызвать из метода Public Sub Caller(Optional NameFun as String="GetUsr") dim s as string s=Application.Run(NameFun) 'в этом месте гнется End Sub в модуле, пожалуйста, а вот вызвать из класса-фиг. Может у кого есть подсказочка? | |||
| 1
    
        Господин ПЖ 22.03.12✎ 20:08 | 
        класс - это кто?
  если функция класса и не static - нужен экземпляр | |||
| 2
    
        ШтушаКутуша 22.03.12✎ 20:10 | 
        (1) в VBA есть понятие "Class" внутри набивается код
  методов класса и нужно внутри метода класса вызвать функцию этого же класса | |||
| 3
    
        Господин ПЖ 22.03.12✎ 20:12 | 
        (2) через this. ?     | |||
| 4
    
        Господин ПЖ 22.03.12✎ 20:12 | 
        если ты дергаешь методы того же экземпляра     | |||
| 5
    
        ШтушаКутуша 22.03.12✎ 20:15 | 
        (3) в VBA нет нотации "this" это в java, а в VBA "Me", как в Delphi "Self"     | |||
| 6
    
        Господин ПЖ 22.03.12✎ 20:19 | 
        (5) какая разница... в C# есть... суть не меняется     | |||
| 7
    
        ШтушаКутуша 22.03.12✎ 20:21 | 
        (6) надо имя вызываемой функции передавать как строку, можно б был указатель,
  но VBA-указателей нема | |||
| 8
    
        Господин ПЖ 22.03.12✎ 20:29 | 
        а так?
  Sub userfile_click() Dim fname As String 'first name Dim sname As String 'surname 'Took wname out of here 'Changed .activate code to .offfset code sname = ActiveCell fname = ActiveCell.Offset(0, 1) wname = sname & fname & ".xls" 'Call fileopen sub Call getfile(wname) End 'to close the form End Sub Sub getfile(nametoopen) 'Uses wname from first sub Workbooks.Open FileName:="c:\My documents\" & nametoopen End Sub | |||
| 9
    
        ШтушаКутуша 22.03.12✎ 20:33 | 
        (8) Спасибо. :) но к сожалению это не то     | |||
| 10
    
        smaharbA 22.03.12✎ 22:09 | 
        modul1.GetUsr()     | |||
| 11
    
        ШтушаКутуша 22.03.12✎ 22:57 | 
        (10) 
  Public Sub Caller(Optional NameFun as String="GetUsr") dim s as string s=Application.Run("MyClass.GetUser") End Sub Так?? | |||
| 12
    
        Torquader 23.03.12✎ 00:38 | 
        В vba нет this - просто вместо него пишется me а работает примерно также то есть можно пользоваться указателями на объекты.
  Другое дело,что функции класса - не совсем функции - нельзя получить указатель на них то есть нужно ссылаться на эземпляр объекта и вызывать функцию Для вызова же кода из строки существует execute и executeglobal,через которые можно исполнить любой код. Удачи. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |