Имя: Пароль:
IT
 
Вызов функции класса при помощи 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,через которые можно исполнить любой код.
Удачи.