Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вызов пользовательской функции / 7 сообщений из 7, страница 1 из 1
10.07.2014, 13:41
    #38693141
Frost_Imp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов пользовательской функции
Комраду, есть пользовательская функция, которая вызывается в Excel как функция (=СЦЕПИТЬЕСЛИ). Специфика в том, что основной макрос у меня в одном файле EXCEL, а данные - в другом. В этом самом другом файле функция, сохраненная в первом файле, не вызывается. Добавлять модуль в каждый обрабатываемый файл - не вариант. Как еще обойти это ограничение?
_____________________
А что на самом деле хотел сказать "Frost_Imp" никто не знает, так как администрация форума попросила его быть вежливым.
...
Рейтинг: 0 / 0
10.07.2014, 14:01
    #38693185
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов пользовательской функции
Этот модуль нужно поместить в Personal.xls, если Excel до и 2003, и в Personal.xlsb, если выше.
...
Рейтинг: 0 / 0
10.07.2014, 14:49
    #38693282
Frost_Imp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов пользовательской функции
zchvv, да, я об этом думал. Но файл, в котором пишется код, будет отправлен другому человеку. И там тоже непонятно, на скольких машинах будут им пользоваться. Поместить код в personal, думаю, они будут не в состоянии. Нужна "коробка"
...
Рейтинг: 0 / 0
10.07.2014, 15:52
    #38693442
Frost_Imp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов пользовательской функции
С горя начал искать варианты копирования модуля. Накопал вот такой код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Function Copy_Module()
    Dim objVBProjFrom As Object, objVBProjTo As Object, objVBComp As Object
    Dim sModuleName As String, sFullName As String
    'расширение стандартного модуля
    Const sExt As String = ".bas"
 
    'имя модуля для копирования
    sModuleName = "Module2"
    On Error Resume Next
    'проект книги, из которой копируем модуль
    Set objVBProjFrom = ThisWorkbook.VBProject
    'необходимый компонент
    Set objVBComp = objVBProjFrom.VBComponents(sModuleName)
    'если указанного модуля не существует
    If objVBComp Is Nothing Then
        MsgBox "Модуль с именем '" & sModuleName & "' отсутствует в книге.", vbCritical, "Error"
        Exit Function
    End If
    'проект книги для добавления модуля
    Set objVBProjTo = ActiveWorkbook.VBProject
    'полный путь для экспорта/импорта модуля. К папке должен быть доступ на запись/чтение
    sFullName = aPath & sModuleName & sExt
    objVBComp.Export Filename:=sFullName
    objVBProjTo.VBComponents.Import Filename:=sFullName
    'удаляем временный файл для импорта
    Kill sFullName
End Function


Срабатывает условие
If objVBComp Is Nothing Then
хотя Module2 существует. МОжет, вопрос в том, что нужный мне модуль - не модуль книги, а стандартный модуль (модуль проекта)?
...
Рейтинг: 0 / 0
10.07.2014, 22:32
    #38693847
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов пользовательской функции
Frost_Imp,

Можно поместить функцию в Add-in и отправить его вместе с файлом с данными, а конечному пользователю инструкцию как пользоваться или написать инсталлятор Add-in'а.
...
Рейтинг: 0 / 0
11.07.2014, 09:20
    #38693994
Frost_Imp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов пользовательской функции
iMrTidy, ну, в общем-то такой же костыль, как я и сделал: копирую из целевого файла лист с данными в файл с функцией, провожу необходимые вычисления. Результат вставляю в целевой файл, лист с данными из файла с функцией удаляю :)
...
Рейтинг: 0 / 0
11.07.2014, 12:12
    #38694176
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов пользовательской функции
Frost_ImpС горя начал искать варианты копирования модуля. Накопал вот такой код
Срабатывает условие
If objVBComp Is Nothing Then
хотя Module2 существует. МОжет, вопрос в том, что нужный мне модуль - не модуль книги, а стандартный модуль (модуль проекта)?
Код мой. И если он пишет, что данного модуля нет - значит его либо реально нет в книге с кодом, либо Вы не все прочитали перед применением кода и доступ к проекту VBA не является доверенным: Что необходимо для внесения изменений в проект VBA(макросы) программно

А вообще самый оптимальный метод именно с использованием надстройки.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вызов пользовательской функции / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]