Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выполнение VB макроса в Excel c помощью COM

5.4K
26 ноября 2003 года
alex_sp
6 / / 26.11.2003
Проблема с запуском процедуры из созданного в Excel модуля VB.

Простейший пример :
------------------------------------------------------------

_Application * pIAppl;
_Workbook * pIWbook;
VBComponent * pVBC;

// APPID & CLSID
//**************************************
LPWSTR XLAppName;
CLSID clsid;

// Create Instance
//**************************************
XLAppName=L"Excel.Application";
CLSIDFromProgID(XLAppName, &clsid);
CoInitialize(NULL);
CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER,
IID__Application, (void**)&pIAppl);

//++++++++++++++++++++++++++++++++++++++

pIAppl->set_Visible(0,OleVariant(true));
pIAppl->set_DisplayAlerts(0,0);

pIWbook=pIAppl->Workbooks->Add(OleVariant(xlWBATWorksheet),0);
pIWbook->VBProject->VBComponents->Add( vbext_ct_StdModule,&pVBC);

pVBC->CodeModule->InsertLines(10,
WideString(" Sub vbp() "));
pVBC->CodeModule->InsertLines(20,
WideString(" ActiveCell.FormulaR1C1 =\x22 One \x22 "));
pVBC->CodeModule->InsertLines(30,
WideString(" End Sub "));

pIAppl->Run(OleVariant("vbp"));

//**********************************************************

pIWbook->Close (OleVariant(true),OleVariant(WideString("D:\\XLSHEET.XLS")));

pIAppl->Quit();

pVBC ->Release();
pIAppl->Release();


CoUninitialize();



-----------------------------------------------------------------------
модуль создается ,но не выполняется команда

pIAppl->Run(OleVariant("vbp"));

вместо построчного заполнения кода модуля , пробовал
импорт из файла , ситуация аналогичная , модуль создается
а выполнить процедуру не могу , единственное , что помогает ,
использование Auto_Open() - как имени процедуры , заставляет ее
автоматически запустится при загрузке.

Может быть я ипользую неправильный снтаксис для запуска ?

Помогите, кто знает .
1.3K
27 ноября 2003 года
zja
119 / / 25.11.2003
не силен я в макросах Excel, но была одна задачка, попробуй для своих целей компонент XLSReadWriteII , возможно поможет
5.4K
27 ноября 2003 года
alex_sp
6 / / 26.11.2003
К сожалению читать или записывать значения в ячейки
Excel - работает без проблем , а мне нужно динамически создать VB макрос в Excel , который можно будет тут же выполнить , зачем мне это -
поясню : мне нужно из отдельной программы сформировать в Excel что-то типа отчета ,
в котором будут отображены некоторые данные ,
находящиеся в моей программе .
Проблема в том , передать SAFEARRAY c данными я не
могу , а заполнять каждую ячейку отдельно - выполняется очень медленно , т.к. Excel запущен
как Local сервер , поэтому вызов 1 фунции Excel
происходит через proxy и stub обьекты, а макрос выполняется в том же процессе , где запущен Excel,
поэтому скорость на порядок выше.
5.4K
27 ноября 2003 года
alex_sp
6 / / 26.11.2003
К сожалению чтение или запись значения в ячейки
Excel - работает без проблем , а мне нужно динамически создать VB макрос в Excel , который можно будет тут же выполнить , зачем мне это -
поясню : мне нужно из отдельной программы сформировать в Excel что-то типа отчета ,
в котором будут отображены некоторые данные ,
находящиеся в моей программе .
Проблема в том , передать SAFEARRAY c данными я не
могу , а заполнять каждую ячейку отдельно - выполняется очень медленно , т.к. Excel запущен
как Local сервер , поэтому вызов 1 фунции Excel из моей программы происходит через proxy и stub обьекты, а макрос выполняется в том же процессе , где запущен Excel,
поэтому скорость выполнения макроса выше.

Спасибо за ответ.
1.3K
27 ноября 2003 года
zja
119 / / 25.11.2003
вы можете сформировать этот отчет в обычный Grid или похожий компонент? или просто в виде самоадресуемой структуры? или это результат запроса к бд?, просто XLSReadWriteII вообще на самом деле Excel не вызывает и работает очень быстро)))) быстрее чем вы думаете, быстрее чем работает сам Excel... и он не только пишет и читает, у него гораздо больше возможностей ... 100000 - 300000 строк за 10 минут на PentiumII-400 ))) слабо? я перебрасываю данные из Sybase SQL в Excel 97 и ничего не форматирую потом кроме автофильтра)))) могу прислать исходник, прога занимает 50 строчек, из них 30 строчек - SQL запрос
1.3K
27 ноября 2003 года
zja
119 / / 25.11.2003
это может не много не в тему, но так ... о скоростях)))
5.4K
27 ноября 2003 года
alex_sp
6 / / 26.11.2003
если б данные греблись из базы - тогда какие проблемы ;) ,с помощью ADO я заливал Exel страницы,
одной командой FillFromRecordSet у меня заливалось
53000 записей ( 14 полей в каждой ) в Excel за 12 секунд на машине Duron 600 . сервер - ADS
Все дело в том данные берутся вовсе не из БД,
а висят в памяти программы , которая к тому же
написана на идиотском контейнерном языке xbase++,
в котором нет прямого доступа к памяти , и максимум
что можно сделать - вызвать функцию из DLL ,
написанную на любом другом языке ) , поэтому в
этой идиотской программе я создаю динамически файл
с VB процедурой с расширением .bas и с помощью функции написанной на BCB я пытаюсь загнать этот скрипт в эксель и его там выполнить.
Загнать получается и выполнить , если имя процедуры
Auto_Open() ( c таким именем выполняется автоматически ) , а если взять другое имя , то макрос зараза не хочет выполняться .

А насчет комронента - это интересно , подскажи где его можно взять .
5.4K
28 ноября 2003 года
alex_sp
6 / / 26.11.2003
C проблемой разобрался , все работает , а насчет
компонента заинтригован , подскажи где взять.
C благодарностью за содействие ,
alex_sp.
1.3K
28 ноября 2003 года
zja
119 / / 25.11.2003
Цитата:
Originally posted by alex_sp
C проблемой разобрался , все работает , а насчет
компонента заинтригован , подскажи где взять.
C благодарностью за содействие ,
alex_sp.


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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог