Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Вызвать макрос и передать параметры из VB


Автор: dobbro 22.8.2011, 15:23
Добрый день. Есть необходимость вызывать уже готовый, отлаженный макрос из кода VB. Смысл такой - юзер вводит в TextBox-ы значения какие то, я их читаю, присваиваю переменным, а потом эти переменные нужно передать в макрос. Макрос должен сработать. Назад в программу ничего не передается. Ну или буду передавать "ОК" там какой-нибудь. Как мне это сделать. Учебники читать я бросил, т.к. там хрень пишут иногда такую, что можно 2 суток сидеть в недоумении. Заранее спасибо!

Автор: CaptainNemo 23.8.2011, 00:58
dobbro, 
Цитата

макрос из кода VB

Не совсем понятен вопрос. Хотите из программы, написанной на VB6 (VB.NET) запускать MS Office и передавать параметры в макрос? Или речь идет исключительно о VBA? 

Автор: dobbro 23.8.2011, 08:31
Цитата

Хотите из программы, написанной на VB6 (VB.NET) запускать MS Office и передавать параметры в макрос?

да. именно так. просто макрос был написан уже давно. сейчас захотел скомпилировать exe-к чтобы не мучиться с этими макросами... Проще всего как то интегрировать форму мою с макросом. Чтобы всю прогу не переписывать.

Автор: Staruha 23.8.2011, 09:37
Если форму пишешь на VB6 то за кодом туда иди.Если на делфи в xl могу скинуть

Автор: dobbro 23.8.2011, 09:41
Цитата

Если на делфи в xl могу скинуть

давай на делфи. мне все равно, главное чтобы работало

Автор: Staruha 23.8.2011, 09:54
Могу только вечером.Все дома.Можешь на Делфи сходить там эта тема обсуждалась.А данные ты кидаешь не в макрос а в ячейки.Оттуда потом макрос или в переменные

Автор: dobbro 23.8.2011, 10:08
Цитата

А данные ты кидаешь не в макрос а в ячейки

так, а как же моя прога инициирует запуск макроса тогда? Если из проги данные писать в ячейки активной книги, то просто конечно получается. Но как эту книгу открыть и запустить макрос на выполнение после того, как прога заполнит соответствующие ячейки?

Автор: Akina 23.8.2011, 11:43
dobbro, подключи соотв. референсную библиотеку, создай объект соотв. приложения, и работай с ним из VB так,  как будто ты всё ещё внутри Офиса и пишешь на VBA. Заноси значения в ячейки, вызывай подпрограммы с параметрами и пр.

Автор: dobbro 23.8.2011, 14:15
Цитата

подключи соотв. референсную библиотеку, создай объект соотв. приложения

я бы так и сделал, если бы знал что и как подключать...

Автор: Akina 23.8.2011, 14:58
См. аттач.

Автор: Staruha 23.8.2011, 21:15
   
Код

procedure Tform1.Zarplata(Sender: TObject);
   var
ex:variant;
begin
     ex:=createoleobject('excel.application');
ex.workbooks.open('C:\Проект\Zarplata.xlt');
       ex.worksheets[1].cells[1,1].value:=Edit1.text;
ex.visible:=true;
end;

Вот из едита кидаешь в ячейку 1.Смотришь с какими ячейками работает макрос и можешь кинуть данные туда

Автор: dobbro 24.8.2011, 08:28
Цитата(Akina @ 23.8.2011,  14:58)
См. аттач.

Akina, ссылку подключил. теперь бы понять как объект создать... я в VB 1 раз пишу, так что помощь нужна...

Автор: Akina 24.8.2011, 08:30
Код

dim xl as excel.application

Автор: dobbro 24.8.2011, 08:39
Цитата

dim xl as excel.application

а дальше что? как с ним потом работать? 1 пример, чтобы я понял плиз

Автор: Akina 24.8.2011, 09:40
Цитата(dobbro @  24.8.2011,  09:39 Найти цитируемый пост)
а дальше что? как с ним потом работать? 1 пример, чтобы я понял плиз 

А дальше в поиск по форуму... там и примеры есть.

Автор: dobbro 24.8.2011, 09:40
Так, тут разобрался. теперь трабл вот в чем:
Код

artikul_current = xl.Left(xl.Cells(i, artikul_number), 7)

дает ошибку: "Ошибка    1    "Public Property Left() As Double" не имеет параметров, поэтому невозможно проиндексировать возвращаемый им тип.    C:\Users\никс\Documents\Visual Studio 2008\Projects\Price_Corrector\Price_Corrector\Form1.vb    25    35    Price_Corrector"
хз че делать. с xl.Right и xl.Mid проблем нет никаких. А вот тут...

Автор: dobbro 24.8.2011, 10:26
тоже разобрался. там как раз таки почему то нужно было писать Microsoft.VisuaBasic.Left...

Автор: Akina 24.8.2011, 10:30
dobbro, у тебя VB.Net, что ли?


Автор: dobbro 24.8.2011, 11:08
Да. Теперь другая проблема... как мне открыть книгу? xl.Workbooks.Open("D:\Experiment_1.xls") не помогает

Автор: Akina 24.8.2011, 11:24
Цитата(dobbro @  24.8.2011,  12:08 Найти цитируемый пост)
Да. 

Что - да? VB.Net? а если так - то что ж ты его кодом для VB6 мучаешь? 
Шагай уже в раздел по .Net, что ли...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)