Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Референс Офиса / 25 сообщений из 36, страница 1 из 2
06.05.2015, 11:39
    #38952466
Референс Офиса
Добрый день !
Подскажите решение, пожалуйста.

Создал базу в Access 2003.
На моей машине стоит Офис 2010. Офис - 15 версия.
Там где будет работать Офис 2007. Офис - 12 версия.

С вордом и экселем справился поздним связыванием. А как быть с самим офисом ?!
У меня с его омощью сделаны меню. Само меню меняется программно.

Есть, конечно, запасной вариант: меняю референс на машине с 2003 офисом, пересохраняю файл.
И тогда на машине с более поздним все работает.
Но хотелось бы как-то упростить процедуру.
...
Рейтинг: 0 / 0
06.05.2015, 12:50
    #38952547
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Референс Офиса
Павел Жданов,

я вот не совсем понял зачем ссылки на библиотеки. Что значит
Павел Ждановкак быть с самим офисом ?!
Где у Вас меню создаются? Сам по себе Офис - это набор приложений: Excel, Word, Access и т.д. В нем нельзя создать меню - оно создается в отдельном его приложении.
Поэтому напишите из какого приложения в каком Вы чего создаете и как. Тогда можно будет подумать как помочь.
...
Рейтинг: 0 / 0
06.05.2015, 12:58
    #38952566
Референс Офиса
The_Prist,

Вот код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim MyMenuBar As CommandBar
Dim Ctr_Pop As CommandBarPopup
Dim Ctr_but As CommandBarButton
'-------------
Set MyMenuBar = CommandBars.Add(Name:="MyMenu", Position:=msoBarTop, MenuBar:=True, Temporary:=True)
MyMenuBar.Visible = True
MyMenuBar.Protection = msoBarNoMove



В референсах - "Microsoft Office 15.0 Object Library"
Без этой ссылки не работает. Или другой версии.
...
Рейтинг: 0 / 0
06.05.2015, 13:08
    #38952577
Референс Офиса
Вот такое меню получается:
...
Рейтинг: 0 / 0
06.05.2015, 13:10
    #38952578
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Референс Офиса
Павел Жданов,

а зачем здесь референс? Вы внутри одного приложения ведь все это делаете?
Другой момент, что может влиять отсутствие ссылки на родителя:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim MyMenuBar As object
Dim Ctr_Pop As object
Dim Ctr_but As object
'-------------
Set MyMenuBar = Application.CommandBars.Add(Name:="MyMenu", Position:=msoBarTop, MenuBar:=True, Temporary:=True)
MyMenuBar.Visible = True
MyMenuBar.Protection = msoBarNoMove
...
Рейтинг: 0 / 0
06.05.2015, 13:43
    #38952618
Референс Офиса
Попробовал без ссылки, заменив Объектом.
Заменил часть определений цифрами. Все равно не "пашет" :(
В строке "Set MyMenuBar =" уже ошибку выдает.
...
Рейтинг: 0 / 0
06.05.2015, 14:14
    #38952660
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Референс Офиса
Павел Жданов,

А что за ошибка? Вы перед созданием удаляете это меню? Вдруг в первый раз создалось, а Вы потом еще пытаетесь создать с таким же именем?
Application. добавили?
...
Рейтинг: 0 / 0
06.05.2015, 14:58
    #38952712
Референс Офиса
Павел Жданов,

а константы msoBarTop, msoBarNoMove и др. кто при отключении ссылки будет определять? Поэтому и ошибка (в зависимости от наличия Option Explicit одна или другая).

Ссылка на библиотеку (сильно) нужна, если надо обрабатывать события.
...
Рейтинг: 0 / 0
06.05.2015, 15:08
    #38952722
Референс Офиса
Константы не определяет.
События есть - тыки по меню, добавления меню и удаления.

Есть ли хитрый споособ обойти ссылку ? По примеру с Word и Excel:

Код: vbnet
1.
2.
Set exAp = CreateObject("Excel.Application")
Set wdAp = CreateObject("Word.Application")





Если без ссылки не обойтись, то, видимо, как-то ее нужно изменить. Одну версию на другую...
...
Рейтинг: 0 / 0
06.05.2015, 15:17
    #38952729
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Референс Офиса
Павел Жданов,

Давайте все же с самого начала. Какое это приложение вообще? Чему принадлежит Application? Откуда запускается код? Откуда уверенность, что есть вообще возможность создания приведенным выше способом панелей?
...
Рейтинг: 0 / 0
06.05.2015, 15:46
    #38952760
Референс Офиса
The_Prist, хорошо, начнем с начала :))

Какое это приложение вообще?
Приложение - Access 2003
Программа создана для учета видеокассет в Архиве.

Чему принадлежит Application?
У меня на рабочем компе админы поставили Офис 2010 (лицензия и т.п.)
В кабинете Архива стоит комп с Офисом 2007

Откуда запускается код?
Файл MDB запускается на компе с Офисом 2007.
При запуске происходит создание меню, состояние меню зависит от текущих данных.
Также меню меняется в процессе работы программы.

Откуда уверенность, что есть вообще возможность создания приведенным выше способом панелей?
На моём компе все прекрасно работает. Если вручную на машине с Офисом 2007 поменять ссылку, то тоже всё прекрасно работает.
...
Рейтинг: 0 / 0
06.05.2015, 16:05
    #38952784
Референс Офиса
Вот, можете поэкспериментировать. Создаётся меню с одной кнопкой - "Kassets". По клику на ней появляется окно "Clic on Menu".
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Function Start()
Dim MyMenuBar As CommandBar
Dim Ctr_Pop As CommandBarPopup
Dim Ctr_Pop_but As CommandBarButton
'-------------
Set MyMenuBar = CommandBars.Add(Name:="MyMenu", Position:=msoBarTop, MenuBar:=True, Temporary:=True)
MyMenuBar.Visible = True
MyMenuBar.Protection = msoBarNoMove
'====================================================
Set Ctr_Pop_but = MyMenuBar.Controls.Add(msoControlButton)
With Ctr_Pop_but
    .Style = msoButtonCaption
    .Caption = "Kassets"
    .TooltipText = "Help text"
    .FaceId = 202
    .OnAction = "=Fnd()"
    .Parameter = "kass"
    .BeginGroup = True
End With
'====================================================
End Function

Function Fnd()
Dim MyMenu As CommandBar, pr As String
'------------------------------------
Set MyMenu = CommandBars("MyMenu")
'------------------------------------
' The ActionControl property of command bars returns the control
' whose OnAction property is running this procedure.
pr = CommandBars.ActionControl.Parameter
Select Case pr
    Case Is = "kass"
     MsgBox "Clic on Menu"

End Select
End Function
...
Рейтинг: 0 / 0
06.05.2015, 16:09
    #38952789
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Референс Офиса
вам бы в форуме по акцесу уже давно бы объяснили,что 2007 и 2010 - это две большие разницы.
...
Рейтинг: 0 / 0
06.05.2015, 16:10
    #38952791
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Референс Офиса
Павел Жданов,

Не совсем понятно все же, зачем ссылку-то менять? Если мне не изменяет память, то ссылка на приложение, из которого запущен проект ставится автоматом.
Зачем она у Вас вообще установлена? Без неё не работает? Попробуйте ссылку эту снять и скомпилировать проект: Debug-Compile VBAProject
Если нормально скомпилируется без ссылки - то нечего и заморачиваться. Только при этом все же мой совет про добавление Application учтите. Ссылка на офис дает возможность как раз к объектам самого приложения обращаться без указания ссылки на него. А если отключить - то обязательно указывать родителя.
...
Рейтинг: 0 / 0
06.05.2015, 16:18
    #38952799
Референс Офиса
Все большое СПАСИБО !

Пойду спрашивать в другом форуме. Простите, оБшибся местом :)

The_Prist, без ссылки ничего не компилируется и не работает.
...
Рейтинг: 0 / 0
06.05.2015, 16:35
    #38952821
Референс Офиса
Павел Жданов,

можно вытащить библиотеку типов из Офиса 2003 в отдельный файл .tlb, и делать ссылку на него (см. приложение). Попробуйте, попытка-не пытка.

P. S. Да, люди "гонят", но это не значит, что не хотят помочь. А вот если человек не хочет себе помочь сам - то не стоило и начинать.
...
Рейтинг: 0 / 0
06.05.2015, 16:41
    #38952832
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Референс Офиса
Павел Ждановбез ссылки ничего не компилируется и не работаетЧто значит не работает? Какая ошибка? 91? Вы Applicaton везде где надо добавили?

Я вот тестовый проект сделал, добавил туда все, что надо. Снял галку со ссылки. Все работает. Только если убирать Application не работает.
...
Рейтинг: 0 / 0
06.05.2015, 16:48
    #38952840
Референс Офиса
13-й квартал, Ураааааааааааааа !!! Заработалоооо ! Спасибо !!!
...
Рейтинг: 0 / 0
06.05.2015, 17:37
    #38952906
Референс Офиса
The_Prist, поясни, пожалуйста, куда поставить Applicaton ? У меня не работает без ссылки.
...
Рейтинг: 0 / 0
06.05.2015, 17:45
    #38952916
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Референс Офиса
Код: vbnet
1.
...  = Application.CommandBars.Add
...
Рейтинг: 0 / 0
06.05.2015, 17:46
    #38952920
Референс Офиса
The_PristСсылка на офис дает возможность как раз к объектам самого приложения обращаться без указания ссылки на него. А если отключить - то обязательно указывать родителя.Загадочные фразы сами по себе. И библиотеке типов приписываются свойства, которыми она не обладает.
...
Рейтинг: 0 / 0
06.05.2015, 17:58
    #38952933
Референс Офиса
Konst_One,

зачем там явный Application? У Application выставлен атрибут appobject , все методы и свойства попадут в global namespace. В том числе CommandBars.
...
Рейтинг: 0 / 0
06.05.2015, 18:08
    #38952946
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Референс Офиса
это ответ куда его вставлять, а зачем это не ко мне. я уже не помню, что там в акцессе накручено в объектной модели. тем более, что ТС уже применил tlb и у него всё ок.
...
Рейтинг: 0 / 0
06.05.2015, 18:14
    #38952953
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Референс Офиса
13-й квартал,

Коллекция CommandBars относится к Application. А отношение это прописано в библиотеке "Microsoft Office XX.0 Object Library". Если она подключена - то запись CommandBars.Add будет работать и VBA по умолчанию припишет CommandBars к Application, как прописано в типах(как using в C). Но если убрать ссылку на библиотеку "Microsoft Office XX.0 Object Library", то коллекция CommandBars ни к кому не будет отнесена и VBA сочтет её необъявленной процедурой или переменной. И если установлена директива Option Explicit - VBA честно об этом ошибкой и скажет. Если не установлена вышеупомянутая директива - то при попытке создать новую панель получим ошибку отсутствия метода для объекта.
...
Рейтинг: 0 / 0
06.05.2015, 18:35
    #38952966
Референс Офиса
Итак, методом проб и ошибок разобрался !

Переменные заменил Объектами. Все константы - цифрами.

Ошибка вылезала из-за вот этого - "Option Explicit" !
Как только убрал - перестал Access ругаться :)
И без апликейшена тоже работает.

Осталось заменить чем-то Office.FileDialog
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Референс Офиса / 25 сообщений из 36, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]