Страницы: 1
RSS
три сосны в xla
 
Привет  
В одном из модулей надстройки такой код  
 
Private IFunctions As Object  
 
Private Function Initialize()  
       Set IFunctions = CreateObject("Имя_Надстройки.Имя_Модуля")  
End Function  
 
Затем в ТОМ ЖЕ модуле  
 
Public Function f_1()  
   Dim a As Integer = IFunctions.Имя_Функции(параметры)  
End Function  
 
Пробовал пройтись в отладчике - ничего не получилось - функция просто выполняется  
Помогите найти тело/код Имя_Функции
 
Ищите в VBA проекте "Имя_Надстройки" модуль класса "Имя_Модуля", а в нем  
Property Get Имя_Функции(параметры)  
Только проект, скорее всего, закрыт от просмотра.
 
{quote}{login=Казанский}{date=08.04.2011 10:34}{thema=}{post}Ищите в VBA проекте "Имя_Надстройки" модуль класса "Имя_Модуля", а в нем  
Property Get Имя_Функции(параметры)  
Только проект, скорее всего, закрыт от просмотра.{/post}{/quote}  
 
Проект открыт, в нем есть "Class Modules", в них есть несколько калссов  
в них есть Property Get, но Property Get Имя_Функции нет  
 
честно прорыл весь проект Ctrl+F, но ничего похожего на Имя_Функции не нашел  
 
где еще посомтреть
 
А что это за загадочная строка?  
Dim a As Integer = IFunctions.Имя_Функции(параметры)  
 
И у вас это работает????
 
{quote}{login=EducatedFool}{date=08.04.2011 12:27}{thema=}{post}А что это за загадочная строка?  
Dim a As Integer = IFunctions.Имя_Функции(параметры)  
 
И у вас это работает????{/post}{/quote}  
 
Да, конечно работает. Более того по-шагово в дебугере можно все посмотреть.  
Специально ввел Имя_Функции, чтобы не морочить всех спецификой надстройки.  
Интересно то, что после Set IFunctions = СreateObject("Имя_Надстройки.Имя_Модуля")  
попытавшись посмотреть свойства IFunctions нажал на крестик слева от него в Ватчес - он развернул одну только строку и та оказалась пустой  
 
Где же хранится выполняемый код функции ?
 
Коллеги, какие есть варианты?
 
Ну, собсно, после Вашего категорического утверждения, что эта строка  
Dim a As Integer = IFunctions.Имя_Функции(параметры)  
у Вас работает, вариантов нет.  
Выкладывайте сюда надстройку согласно Правилам http://www.planetaexcel.ru/forum.php?thread_id=8735 (т.е. не более 100 кб, можно в архиве).
 
Декларация:    
Dim a As Integer = IFunctions.Имя_Функции(параметры)  
говорит о том, что это VB.Net    
А язык VB.Net - это совсем не VBA.  
 
Если это все же опечатка, то, скорее всего, помимо XLA в системе регистрируется еще и динамическая библиотека DLL с тем же именем, что и XLA.  
 
Тогда Set IFunctions = CreateObject("Имя_Надстройки.Имя_Модуля")  
аналогичен, например вот этому:    
Dim FSO as Object  
Set FSO = CreateObject("Scripting.FileSystemObject")  
MsgBox FSO.FileExists("C:\Temp\Test.xls")
 
То есть, речь видимо идёт о COM-надстройке, что не стыкуется с названием темы
 
Вы правы, в действительности код выглядит вот так  
{quote}Private IFunctions As Object  
 
Private Function Initialize()  
 Set IFunctions = CreateObject("Имя_Надстройки.Имя_Модуля")  
End Function  
 
Public Function f_1()    
 f_1 = IFunctions.Имя_Функции(параметры)  
End Function{/quote}  
и действительно помимо XLA в системе зарегистрирована еще и динамическая библиотека DLL с тем же именем, что и XLA, и она подключена в Референс  
 
Спасибо за внимание к деталям.
 
Ну да, применен  стандартный способ защиты – функции скомпилированы в бинарный код DLL, а XLA используется в качестве посредника между Excel и DLL.  Исходники DLL есть только у автора, тем самым сохранены его эксклюзивные права на алгоритмы обработки и исходные тексты.
Страницы: 1
Читают тему
Наверх