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