Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.74/38: Рейтинг темы: голосов - 38, средняя оценка - 4.74
Piton777
12 / 1 / 1
Регистрация: 27.06.2012
Сообщений: 81
1

Вызов надстройки через VBA

04.07.2012, 20:09. Просмотров 7353. Ответов 21
Метки нет (Все метки)

Здравствуйте. Очень нужна Ваша помощь.

Задача следующая:
В VBA для Excel 2003 необходимо написать макрос с использованием (вызовом) уже существующей надстройки.
Какой командой в VBA можно вызвать и запустить существующую надстройку?
Заранее спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2012, 20:09
Ответы с готовыми решениями:

Вызов окна функции из надстройки
Добрый день. Сделал надстройку типа RIBBON. В меню перечислил свои...

Вызов функции из другой формы VBA
Есть форма "frm", на ней несколько subforms, по нажатию на кнопку в главной...

Дубль-вызов обработчика TextBox_MouseDown - VBA Excel
Доброй ночи, уважаемые форумчане, объясните пожалуйста подробности...

Вызов базы данных Access средствами VBA
Мне необходимо в экранную форму, создаваемую средствами VBA, вывести таблицу из...

Вызов транзакции в SAP с использованием языка VBA
Макрос запускает систему, но не вызывает транзакцию, почему? Function...

21
mc-black
2760 / 695 / 102
Регистрация: 04.02.2011
Сообщений: 1,421
04.07.2012, 20:26 2
Надстройку нельзя вызвать. Она либо есть, либо её нет. Надстройка - это книга Excel, сохраненная в специальный формат. Можно вызвать из неё открытые функции или процедуры, обратиться к её классам, UserForm'ам и т.д., Единственное, надстройка не отображает свои литы (но можеть иметь их, и не один). Надстройка, если она есть, подгружается при запуске Excel. Сомневаюсь, что вам программно нужно подключать надстройку. Определитесь, чего вы хотите, а то я сегодня на предсказания вопросов всю карму растратил.
0
Piton777
12 / 1 / 1
Регистрация: 27.06.2012
Сообщений: 81
04.07.2012, 20:38  [ТС] 3
Имеется скачанная надстройка (См. во вложении. ), ее код закрыт, единственное, что я могу сделать - это подключить ее и использовать через "Формат -> Строка -> Пользовательский автоподбор высоты"... Мне необходимо написать макрос с использованием (вызовом в определенный момент) данной надстройки.
К примеру:
Запускаем данную надстройку (выравнивает по высоте выделенные объединенные ячейки), далее производим манипуляции с настройками печати и т.д. и т.п.

Так вот я не знаю с помощью какой команды VBA Запустить эту самую надстройку.
0
Вложения
Тип файла: rar nerv_AutoFit_4.2.rar (11.6 Кб, 50 просмотров)
Catstail
Модератор
23764 / 11844 / 2070
Регистрация: 12.02.2012
Сообщений: 19,244
04.07.2012, 20:41 4
Как это - нельзя?

Visual Basic
1
2
3
4
5
Sub Add_In()
 
    Application.AddIns("Имя_надстройки").Installed = True
 
End Sub
2
ikki
призрак
2823 / 879 / 118
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
04.07.2012, 20:54 5
ну так посмотрите, какой макрос назначен на эту команду меню - и вызывайте эту же процедуру из своего кода.
только, наверное, она будет работать с выделенным диапазоном...
0
Piton777
12 / 1 / 1
Регистрация: 27.06.2012
Сообщений: 81
04.07.2012, 21:10  [ТС] 6
залез в VBA впервые, по этому не все понимаю сходу (откровенно торможу).
1. Где найти имя данной надстройки, если ее код закрыт?
2. Пробовал через запись макроса узнать какой командой VBA запускается данная надстройка или ее имя, но, почему-то, кроме комментария кто и когда создал данный макрос ничего не написано.

Скорее всего я туплю, не злитесь, пожалуйста =)
0
Busine2012
1292 / 394 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
04.07.2012, 21:28 7
Надстройка (это файл с расширением .xla) в некоторых случаях относится к рабочим книгам.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Procedure_1()
 
    Dim oAddIn As Excel.Workbook
    
    'В константе sAddInPath нужно указать путь, где находится надстройка.
    Const sAddInPath As String = "C:\Documents and Settings\Пользователь\Рабочий стол\Надстройка.xla"
 
    'Чтобы можно было работать с надстройкой, её надо открыть.
    Set oAddIn = Workbooks.Open(Filename:=sAddInPath)
    
    'Запуск процедуры в надстройке.
    Application.Run Macro:=Dir(sAddInPath) & "!Module1.Procedure_1"
    
    'Закрываем надстройку, если она больше не нужна.
    oAddIn.Close SaveChanges:=False
 
End Sub
2
ikki
призрак
2823 / 879 / 118
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
04.07.2012, 21:31 8
причем тут VBA?

в Excel - правой кнопкой по меню - настройка - в меню выбираете нужный пункт-подпункт - правая кнопка - назначить макрос - появится окно, в нем будет отображено текущее имя макроса, назначенного данному пункту меню.

это для Ex 2003.
для 2007/2010 - точно не скажу, но, думаю, аналогично.
0
Catstail
Модератор
23764 / 11844 / 2070
Регистрация: 12.02.2012
Сообщений: 19,244
04.07.2012, 21:31 9
Надстройки - это файлы с расширением ".xla". Обычно они "сидят" по адресу:
..Progam Files\Microsoft Office\Office\Library

Вот таким кодом можно перечислить их имена:

Visual Basic
1
2
3
4
5
6
Sub AList()
    n% = Application.AddIns.Count
    For i% = 1 To n%
        Debug.Print Application.AddIns(i%).Name
    Next i%
End Sub
2
ikki
призрак
2823 / 879 / 118
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
04.07.2012, 21:38 10
Цитата Сообщение от Piton777 Посмотреть сообщение
кто и когда создал данный макрос
и чем не вариант? е-мейл или сайт автора указан? попробуйте связаться и спросить у автора свой вопрос
0
mc-black
2760 / 695 / 102
Регистрация: 04.02.2011
Сообщений: 1,421
04.07.2012, 22:06 11
Цитата Сообщение от Catstail Посмотреть сообщение
Надстройки - это файлы с расширением ".xla". Обычно они "сидят" по адресу:
..Progam Files\Microsoft Office\Office\Library
Я всегда считал, что обычный путь для надстроек это:
c:\Documents and Settings\Пользователь\Application Data\Microsoft\AddIns\
По крайней мере у меня так на двух машинах с Excel 2003 и 2007.
Насчет расширений, у надстроек может быть также расширение .xll и .xlam Последний вариант для 2007/2010 хочется читать как "хлам"))
0
Piton777
12 / 1 / 1
Регистрация: 27.06.2012
Сообщений: 81
04.07.2012, 22:24  [ТС] 12
1.
Цитата Сообщение от Busine2012 Посмотреть сообщение
Надстройка (это файл с расширением .xla) в некоторых случаях относится к рабочим книгам.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Procedure_1()
 
    Dim oAddIn As Excel.Workbook
    
    'В константе sAddInPath нужно указать путь, где находится надстройка.
    Const sAddInPath As String = "C:\Documents and Settings\Пользователь\Рабочий стол\Надстройка.xla"
 
    'Чтобы можно было работать с надстройкой, её надо открыть.
    Set oAddIn = Workbooks.Open(Filename:=sAddInPath)
    
    'Запуск процедуры в надстройке.
    Application.Run Macro:=Dir(sAddInPath) & "!Module1.Procedure_1"
    
    'Закрываем надстройку, если она больше не нужна.
    oAddIn.Close SaveChanges:=False
 
End Sub
В моем случае надстройка открывается автоматически. Настроено через Сервис -> Надсройки -> Стоит галочка напротив надстройки "Автоподбор высоты".
Я не знаю имя процедуры в данном модуле которая вызывается, судя по всему, вот этой командой (Application.Run Macro:=Dir(sAddInPath) & "!Module1.Procedure_1"). Как узнать, тоже не понимаю, код закрыт разработчиком.

2. в Excel - правой кнопкой по меню - настройка - в меню выбираете нужный пункт-подпункт - правая кнопка - назначить макрос - появится окно, в нем будет отображено текущее имя макроса, назначенного данному пункту меню.

Что-то не работает.

3. и чем не вариант? е-мейл или сайт автора указан? попробуйте связаться и спросить у автора свой вопрос

Отправлял, спрашивал. Все работы только за небольшое вознаграждение. =(
0
mc-black
2760 / 695 / 102
Регистрация: 04.02.2011
Сообщений: 1,421
04.07.2012, 22:25 13
В Programm Files, по-моему, только предустановленные с Office надстройки.
Стало интерсно про xll-надстройки. Последние являются dll, причем, если не ошибаюсь, native dll (не ActiveX, либо необязательно ActiveX).
0
ikki
призрак
2823 / 879 / 118
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
04.07.2012, 23:01 14
Лучший ответ Сообщение было отмечено как решение

Решение

Piton777, я понял.

вознаграждение, конечно, платить не хочется. ваше право.
а пользоваться - хочется. тоже ваше право.
и возможность пользоваться, причем бесплатно, как я понимаю, у вас есть - но только так, как того хочет автор этой надстройки.
и это его право, не так ли?

но свои права вы понимаете и уважаете, а чужие, судя по данной теме - как-то не особо.

и хотя в этой теме не было просьб взлома надстройки и этот вопрос не обсуждался, но ваши попытки использования надстройки способом, её автором не предусмотренным, лично я считаю нарушением этики и правил форума.
5
Piton777
12 / 1 / 1
Регистрация: 27.06.2012
Сообщений: 81
04.07.2012, 23:15  [ТС] 15
Честно говоря, даже не подозревал, что без взлома данного файла надстройки нельзя узнать имя процедуры, думал, что не могу решить свою задачу только из-за своего не знания VBA и его возможностей и требование автором вознаграждения за данную работу происходило исключительно из-за моей неопытности в вопросе использования в VBA данной надстройки.
Раз дело обстоит так, как вы говорите, считаю, что данную тему можно закрыть. Будут искать решение данного вопроса другим способом.
Всем спасибо.
0
Казанский
14313 / 5930 / 1571
Регистрация: 24.09.2011
Сообщений: 9,342
05.07.2012, 09:05 16
Возможно, "взламывать" необязательно. Доступные методы и свойства надстройки можно посмотреть в Object Browser. Предварительно надстройку надо подключить к проекту.
Вот тут показано на примере надстройки "Поиск решения":http://peltiertech.com/Excel/SolverVBA.html
2
Catstail
Модератор
23764 / 11844 / 2070
Регистрация: 12.02.2012
Сообщений: 19,244
05.07.2012, 09:24 17
xll - это устаревший формат...
0
mc-black
2760 / 695 / 102
Регистрация: 04.02.2011
Сообщений: 1,421
05.07.2012, 10:16 18
Цитата Сообщение от Catstail Посмотреть сообщение
xll - это устаревший формат...
И поэтому его рекомендуют использовать для оптимизации быстродействия в Excel 2010? Когда это dll были объявлены устаревшими? Не спорю, dll давно придуманы, но MS и не думает от них отказываться, на них крутится вся ось. xll - это нативная dll с addin api с переименованным расширением. Кстати, хотел попытаться откомпилировать xll в masm32 для проверки. А ещё xll бывает и для 64bit процессоров!
1
Catstail
Модератор
23764 / 11844 / 2070
Регистрация: 12.02.2012
Сообщений: 19,244
05.07.2012, 10:25 19
Цитата Сообщение от mc-black Посмотреть сообщение
И поэтому его рекомендуют использовать для оптимизации быстродействия в Excel 2010?
- не встречал такого...

Нет, dll , разумеется, не устареет. Но я бы крепко подумал, стоит ли... Трудозатраты будут отчётливые, а выйгрыш? Лучше уж сделать ActiveX-dll (все же легче, т.к. можно писать на VB).
Правда для 64-х битной среды есть проблемы.
0
mc-black
2760 / 695 / 102
Регистрация: 04.02.2011
Сообщений: 1,421
05.07.2012, 10:49 20
Цитата Сообщение от Catstail Посмотреть сообщение
- не встречал такого...
Не встечал, это не значит, что этого нет, вот мнение.
По части трудозатрат не спорю. Разве для гиков VBA трудозатраты были когда-то преградой? Несколько человек не щадят своего времени, чтобы решать иногда тупые max/min в массвах. Написаль xll было бы неплохим опытом. XLL по части быстродействия и закрытия кода от непосвященных в дизассемблирование это надёжно. У меня пока нет опыта в этой области, но я хотел бы чему-нибудь поучиться.
2
05.07.2012, 10:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2012, 10:49

VBA InternetExplorer.Application вызов объекта/функции
Доброго времени суток, товарищи Возникла проблема в проекте, суть которого...

Access2000: создание своего popUp menu и вызов его из VBA
Создал я свой ToolBar так: Right click по панели инструментов, выбрал из...

Вызов объекта через строковую переменную
Excel. Есть книга с главным листом и множеством второстепенных. Задача:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru