Reference на все версии office

Программирование на Visual Basic for Applications
AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Reference на все версии office

Сообщение AlexeySch » 19.01.2006 (Чт) 14:49

Есть такая проблема:
Создаю макрос для Word в котором используется Excel. В reference указываю ссылку на мой 2003 excel. Как заставить этот макрос работать на других компах с другими версиями office (2000,XP)?

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

Сообщение alibek » 19.01.2006 (Чт) 15:05

Используй позднее связывание.
Типа Set objExcel = CreateObject("Excel.Application")
А из References ссылки убери.
Lasciate ogni speranza, voi ch'entrate.

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 19.01.2006 (Чт) 15:10

В этом случае автоподстановка работать не будет? И типизировать переменные не получится?

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

Сообщение alibek » 19.01.2006 (Чт) 15:11

Разумеется.
Но ты можешь кодить с ранним связыванием, а затем перейти на позднее, сохранив код.
Lasciate ogni speranza, voi ch'entrate.

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 19.01.2006 (Чт) 15:16

Спасибо, Большой Человек. :)

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 19.01.2006 (Чт) 16:41

Нет, ну можно конечно поступить разумнее, просто раздобыть где-нибудь TLB Office 97, и работать с ней... Я уж думаю, что все офисы СТАРШЕ 97, поддерживают классы старой версии...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 19.01.2006 (Чт) 18:49

ANDLL
А разве reference перескочит с 97 офиса на 2003 сам? Или ты тоже предлагаешь позднее связывание?

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 19.01.2006 (Чт) 22:44

AlexeySch писал(а):ANDLL
А разве reference перескочит с 97 офиса на 2003 сам?

ANDLL писал(а): Я уж думаю, что все офисы СТАРШЕ 97, поддерживают классы старой версии...

Кроче попробуй. Не получится - делай как говорит alibek, получится - тебе куда меньше геморроя.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 19.01.2006 (Чт) 22:51

Только тут потом отчитайся о результатах, а то мне то же интересно.
P.S. тут надо смешивать позднее и раннее связывание. Т.е. при создании юзать CreateObject, а при объявлении - типы из tlb для office 97.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2006 (Пт) 4:30

Тип связывания определяется не способом создания объекта, а способом объявления переменной.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 20.01.2006 (Пт) 12:32

Уж не знаю насколько отчет, но:
Без Referece на excel не получается типизация переменных(например параметров функций(методов)) ибо типа такого найти не получается, а если нет типизациито и автоподстановки нет.
Использавние tlb (на самом деле olb) тоже ведет к reference на этот tlb поэтому придется tlb поставлять вместе с макросом и кидать куда-нибудь в system32.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2006 (Пт) 12:44

Что ты имеешь в виду под типизацией переменных?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 20.01.2006 (Пт) 13:00

dim sheet as WorkSheet - типизированная переменная
dim sheet
dim sheet as Variant - нетипизированные переменные если они используеются только для хранения excel Worksheet
P.S. Если мои термины не правильные - поправьте, плиз

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2006 (Пт) 13:04

Термины правильные, просто...

Хочешь подстановку - перед отвязыванием от tlb замени все dim sheet as worksheet на dim sheet as object. А вообще, объектная модель простая и понятная, можно и по памяти...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 20.01.2006 (Пт) 13:12

GSerg
Ээх... нет в мире счастья :cry:
Память у меня плохая :(
Да в добавок код начинает хуже смотреться, а если еще потом изменения вносить - это обратно все надо переименовывать...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2006 (Пт) 13:22

Так пиши.

#const DEPENDS = true

#if DEPENDS then
dim sheet1 as worksheet
dim sheet2 as worksheet
#else
dim sheet1 as object
dim sheet2 as object
#end if


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

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 20.01.2006 (Пт) 13:27

GSerg
УРРААА!!! Счастье привалило :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2006 (Пт) 13:29

Не радуйся особо. Ты не имеешь права использовать имена констант типа xlLeft, ибо их потом не будет :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 20.01.2006 (Пт) 13:42

GSerg
Говорил же я что нет в мире счастья... :cry: :cry: :evil:
Тогда возможно проще будет все же tlb(olb) файл в system32 переписывать. Кстати у меня в 2003 офисе нашелся файл с excel 5 object library вот его-то наверное и можно переписывать. Хотя не у всех system32 по одному и тому же пути находится, а reference на переменные окружения наверное не поставится... :evil:

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 20.01.2006 (Пт) 13:44

Можно как-нибудь программно поменять reference у макроса?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2006 (Пт) 13:47

Можно. Ссылку на Microsoft VBA Extencibility поставь.

Но.

Я бы очень далеко послал прогу, которая попыталась бы мне установить tlb от разных офисов. И никогда не имел бы дела с автором данной проги.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 20.01.2006 (Пт) 14:14

GSerg писал(а):Можно. Ссылку на Microsoft VBA Extencibility поставь.

Тогда наверное хорошоим путем будет написать инсталлятор(процедуру инсталляции) который меняет reference на необходимый.

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

Сообщение alibek » 20.01.2006 (Пт) 14:25

GSerg писал(а):Не радуйся особо. Ты не имеешь права использовать имена констант типа xlLeft, ибо их потом не будет :)

Код: Выделить всё
#const DEPENDS = true

#if DEPENDS then
dim sheet1 as worksheet
dim sheet2 as worksheet
#else
dim sheet1 as object
dim sheet2 as object
Enum XlAlignment
  xlLeft = 1
  ...
End Enum
#end if
Lasciate ogni speranza, voi ch'entrate.

AlexeySch
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 19.01.2006 (Чт) 14:44

Сообщение AlexeySch » 20.01.2006 (Пт) 14:34

alibek
GSerg
А может тогда весь tlb как-нибудь в макрос загнать и не париться?

Что-то мне на самом деле не очень нравится такая нотация с #const - не красиво выглядит, а если ее еще и к параметрам применять то совсем нечитабельно будет :(
Серьезные макросы поддерживать сложно будет, и так фиг разберешься а если еще через строчку #if-else понапихано то совсем туго...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2006 (Пт) 14:55

Короче.
Позднее связывание. И только оно. С подглядкой в excel по F2.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в VBA

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

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

    TopList