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