Страница 1 из 1
Установка надстройки
Добавлено: 22 ноя 2005, 13:36
MikeM
В Excel-е создал надстройку, которая содержит несколько функций. У меня эти функции выполняются нормально, но если файл, который содержит ф-ции из надстройки открывать на другой машине, то к названию ф-ции добавляется путь ведущий к надстройке на моей машине. При этом сама ф-ция не работает. Может кто-нибудь сталкивался с такой проблемой, подскажите.
Добавлено: 22 ноя 2005, 21:16
Avsha
Т.е. у вас есть следующее:
1. Готовая надстройка, например MyAddIn.xla
2. Рабочая книга, например MyWork.xls, которая использует функции надстройки MyAddIn.xla.
Как я понимаю, должны быть выполнены следующие условия:
1. Надстройка MyAddIn.xla должна быть скопирована с машины пользователя A на машину пользователя B.
Как правило это путь: C:\Documents and Settings\USER_B\Application Data\Microsoft\AddIns
2. Надстройка должна быть подключена (меню Сервис\Надстройки\MyAddIn)
Как у вас осуществляется обращение к функциям (макросам) надстройки MyAddIn.xla из книги MyWork.xls?
- в виде формул в ячеках, которые используют созданные функции "Определенные пользователем" ?
- в виде кнопок Панели управления, которые настроены на запуск макросов надстройки ?
Добавлено: 23 ноя 2005, 10:19
MikeM
Именно так, только путь немного другой - у пользователя А лежит в "Моих документах", а у пользователя В - D:\MyAddIns. А путь, который пишется перед ф-цией на машине В ссылается на папку, как на машине А ("Мои документы"). Обращение к ф-циям - в виде формул в ячеках, которые используют созданные функции "Определенные пользователем".
Добавлено: 24 ноя 2005, 07:15
Avsha
Я проверил все варианты, действительно вы правы, обращение к функции надстройки начинает выглядеть следующим образом:
='C:\Мои Документы\MyAddIn.xla'!proba()
вместо положенного:
=proba()
и Excel при запуске выдает сообщение:
Данная книга содержит автоматически обновляемые связи с другой книгой. Обновить их?
- Чтобы обновить все связанные данные, нажмите кнопку "Да"
Очевидно, что Excel при обращении к функциям надстройки использует имя файла надстройки.
Далее, каждая надстройка, когда подключается в среде Excel, попадает в список VB-проектов со своим именем файла, например:
Application.VBE.VBProjects.Item(2).Filename
Т.е. в вашем случае у пользователя A это имя:
C:\Мои Документы\MyAddIn.xla
а у пользователя B это имя:
C:\AddIn\MyAddIn.xla
поэтому формулы созданные у пользователя A не работают у пользователя B.
У меня все заработало, когда я принял соглашение для обоих пользователей использовать одинаковую папку, например:
C:\AddIns\MyAddIn.xla.
В этом случае формулы, созданные пользователем A работают и у пользователя B.
Но вообще, мне кажется, должно быть другое решение, позволяющее хранить надстройки где хочешь, надо поразбираться.
Добавлено: 24 ноя 2005, 14:09
sergvk
первый раз слышу о подобной проблеме :shock:
Если надстройку на машине В подключить через "Сервис-> Надстройки->Обозр..." далее путь к файлу-надстройке на машине В (можно хранить где угодно). Если, конечно, в надстройке не прописана "полная" выгрзка по окончании работы. Мало того, надстройку можно переложить в другое место и после новой установки Excel только скажет, что уже была такая и спросит "строить новый путь".
Добавлено: 24 ноя 2005, 14:16
Игорь Акопян
Кстати, как вариант вспомнился одын глюк.
Надо проверить нет ли где на диске ещё старых версий этой надстройки, а то он у меня при переподключении и ответе "заменить" всё равно упорно брал старую - чуть весь голова себе не поломал...
Добавлено: 24 ноя 2005, 14:34
Avsha
Игорь Акопян,
Надо проверить нет ли где на диске ещё старых версий этой надстройки, а то он у меня при переподключении и ответе "заменить" всё равно упорно брал старую - чуть весь голова себе не поломал...
Это тоже меня удивило,
например надстройка лежала в папке C:\AddIns\MyAddIn.xla, а я хочу сменить ее место нахождение на C:\AddIns_New\MyAddIn.xla, для этого нажимаю кнопку "Обзор", после чего он спрашивал "Заменить", но путь в Application.VBE.VBProjects.Item(2).Filename остается C:\AddIns\MyAddIn.xla. Excel как бы держит эту надстройку в списке VBProjects - VB-проектов.
Помогает "физическое" удаление файла из C:\AddIns\MyAddIn.xla, затем при отключении надстройки Excel поругается и удалит надстройку из списка VBProjects.
Ну а затем снова подключить уже на место расположения C:\AddIns_New\MyAddIn.xla.
sergvk,
Подключить то можно хоть откуда, а вот при формировании формул запоминается старый путь к надстройке.
Добавлено: 24 ноя 2005, 15:20
sergvk
В моих формулах еще никогда не было пути к надстройке -?)))
Добавлено: 24 ноя 2005, 21:23
Avsha
sergvk, Проделайте следующее...
1. Создайте надстройку MyAddIn.xla с единственной функцией
Public Function MyFunction()
MyFunction = 48
End Function
2. Положите ее в путь C:\Path_1\MyAddIn.xla и подключите.
3. Создайте файл MyWork.xls, в ячеке которой есть формула: =MyFunction().
4. Все закройте. Переместите файл из C:\Path_1\MyAddIn.xla в путь C:\Path_2\MyAddIn.xla
5. Отключите надстройку, спокойно наблюдая на ругательными сообщениями по поводу пути C:\Path_1\MyAddIn.xla
6. Подключите заново надстройку из пути C:\Path_2\MyAddIn.xla
7. Откройте ранее созданный файл MyWork.xls, видите формулу ='C:\Path_1\MyAddIn.xla'!MyFunction() ?
Вот весь вопрос в том, как от этого избавиться?
Покапался еще в объектах, нашел для надстроек следующие элементы -
Application.AddIns.Item("MyAddin").Name
Application.AddIns.Item("MyAddin").Path
Application.AddIns.Item("MyAddin").FullName
Application.AddIns.Item("MyAddin").Installed
А коллекция AddIns содержит все надстройки, приведенные в списке надстроек окна подключения (меню Сервис\Надстройки)
Добавлено: 01 дек 2005, 13:24
Avsha
Еще покапался в справке...
На свежем листе создаем кнопку с кодом - это список надстроек, установленных в системе, список соответствует окну подключения надстроек:
Код: Выделить всё
Private Sub CommandButton1_Click()
With Application.ActiveSheet
.Rows(1).Font.Bold = True
.Range("a1:d1").Value = _
Array("Name", "Full Name", "Title", "Installed")
For i = 1 To AddIns.Count
.Cells(i + 1, 1) = AddIns(i).Name
.Cells(i + 1, 2) = AddIns(i).FullName
.Cells(i + 1, 3) = AddIns(i).Title
.Cells(i + 1, 4) = AddIns(i).Installed
Next
.Range("a1").CurrentRegion.Font.Name = "Tahoma"
.Range("a1").CurrentRegion.Font.Size = 8
.Range("a1").CurrentRegion.Columns.AutoFit
End With
End Sub
Следующая кнопка добавляют новую надстройку в список (метод Add):
Код: Выделить всё
Private Sub CommandButton2_Click()
Set myAddIn = AddIns.Add("C:\AddIns\MyAddin.xla")
End Sub
А следующие две кнопки подключают/отключают указанную надстройку в списке (свойство .Installed):
Код: Выделить всё
Private Sub Cmd_Install_AddIn_Click()
Set ad = AddIns("MyAddin")
ad.Installed = True
End Sub
Private Sub Cmd_UnInstall_AddIn_Click()
Set ad = AddIns("MyAddin")
ad.Installed = Fasle
End Sub
Как раз с помощью списка можно отследить что при переподключении надстройки на другой путь, надстройка временно меняется, но
при следующем запуске Excel опять список показывает старый путь.
Кто знает, что это за чудеса и как объяснить это поведение Excel?
И еще, как по-человечески вручную или программно удалить надстройку из списка надстроек и возможно ли это вообще?