Обращение из-под DLL к Excel

Программирование на Visual Basic for Applications
LevelUP
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 08.09.2005 (Чт) 5:05

Обращение из-под DLL к Excel

Сообщение LevelUP » 12.09.2005 (Пн) 6:16

Часть программного кода макроса реализую под DLL. Саму DLL пишу под VB6.0.

В процедуре пишу:

Set EX = CreateObject("Excel.Sheet")
Set EX = EX.Application.ActiveWorkbook.ActiveSheet
EX.Range("A1").Value = "test"
Set EX = Nothing

При выполнении не ругается, но в ячейку ничего не заносит при этом, что странно, меняется статус окошка книги с "во весь экран" на "обычный". Подскажите как считать/занести из-под DLL значение в ячейку Excel ?

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 12.09.2005 (Пн) 21:18

Попробуй так:
Set Ex = CreateObject("Excel.Sheet")
Ex.ActiveSheet.Range("A1").Value = "test"

LevelUP
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 08.09.2005 (Чт) 5:05

Сообщение LevelUP » 13.09.2005 (Вт) 10:59

Попробовал, все-равно не работает.
При выполнении оператора лист как бы дергается, даже видно как моргает заносимое значение "test" в ячейку, но буквально на сотую долю секунды, а потом перед глазами все тот же лист..странно, что делать не знаю :(
ЗЫ: office2000

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 13.09.2005 (Вт) 11:08

А у тебя Эксель уже открыт в тот момент, когда ты код запускаешь?

Чтобы не множить сущности и темы: есть подозрение, что ты хочешь внести изменения в уже открытую книгу в уже открытом экселе, а делаешь на самом деле другое - создаешь новый instance экселя с чистой книгой и вносишь изменения в нее...
Быть... или не быть. Вот. В чём вопрос?

LevelUP
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 08.09.2005 (Чт) 5:05

Сообщение LevelUP » 13.09.2005 (Вт) 11:17

uhm писал(а):А у тебя Эксель уже открыт в тот момент, когда ты код запускаешь?

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


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

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.09.2005 (Вт) 12:21

С открытой -- GetObject.
И я бы работал не с Excel.Sheet, а с Excel.Application.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.09.2005 (Вт) 12:22

А еще лучше, в своей DLL сделай публичный метод TransferAppInstance(App As Excel.Application), а в своей книге вызывай его TransferAppInstance Application.
Lasciate ogni speranza, voi ch'entrate.

LevelUP
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 08.09.2005 (Чт) 5:05

Сообщение LevelUP » 13.09.2005 (Вт) 12:55

alibek писал(а):А еще лучше, в своей DLL сделай публичный метод TransferAppInstance(App As Excel.Application), а в своей книге вызывай его TransferAppInstance Application.


Однако изящное решение :)
Все заработало!
Спасибо!!!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 93

    TopList