Страницы: 1
RSS
Надстройка, пользовательские функции, проблемы при переносе на другой компьютер
 
Всем здравствуйте!  
Сделал надстройку, поместил в нее несколько пользовательских функций, при переносе на другой компьютер формулы с этими функциями перестают работать, т.к. надстройка там находится по другому пути. Как можно побороть эту проблему.  
Спасибо за внимание!
 
Если имеете макрос все ссылки на диапазоны должны иметь ссылку на ThisBook.  
Если формулы, то файл не должен имет внешних связей...
 
Переношу файл, надстройка уже установлена. Устанавливаю через Сервис - Надстройки
 
Надстройка тоже файл и этот файл должен лежать в папке AddIns примерно по такому адресу C:\Documents and Settings\user\Application Data\Microsoft\AddIns. Остальное туман.. Извольте уточнить Ваши пожелания.
 
на разных компьютерах разные пользователи, т.е. на одном user1, на другом user2 и т.д.    
Файлы, которые содержат формулы с пользовательскими функциями при переносе на другой компьютер пытаются обновить данные из надстройки, находящейся по адресу C:\Documents and Settings\имя_пользователя\Application Data\Microsoft\AddIns, а на другом компьютере эта надстройка уже находится по адресу C:\Documents and Settings\какое-то_другое_имя_пользователя\Application Data\Microsoft\AddIns
 
Но ведь папка AddIns везде есть? Вот и...
 
Да везде, но везде ее путь разный в зависимости от имени пользователя. И на другом компьютере при запуске файла с формулами с пользовательскими функциями, содержащимися в надстройке выскакивает сообщение, что "эта книга содержит связи с другими источниками данных", а при нажатии кнопки обновить "эта книга содержит одну или несколько связей, которые не могут быть обновлены"
 
{quote}{login=DimBaks}{date=10.11.2009 10:09}{thema=}{post}на разных компьютерах разные пользователи, т.е. на одном user1, на другом user2 и т.д.    
Файлы, которые содержат формулы с пользовательскими функциями при переносе на другой компьютер пытаются обновить данные из надстройки, находящейся по адресу C:\Documents and Settings\имя_пользователя\Application Data\Microsoft\AddIns, а на другом компьютере эта надстройка уже находится по адресу C:\Documents and Settings\какое-то_другое_имя_пользователя\Application Data\Microsoft\AddIns{/post}{/quote}  
а у пользователей права админа?  
М б надстройку надо ставить от имени админа в общие документы?
 
The_Prist, а можно уточнить по пункту 1.    
Я книгу excel с пользовательскими функциями сохранил как файл с расширением .xla, потом скопировал в папку c:\Documents ... \Addinc, а потом подключил через Сервис - Надстройки. Всё так? Или можеь быть еще что-то надо было сделать?
 
{quote}{login=DimBaks}{date=10.11.2009 10:41}{thema=}{post}The_Prist, а можно уточнить по пункту 1.    
Я книгу excel с пользовательскими функциями сохранил как файл с расширением .xla, потом скопировал в папку c:\Documents ... \Addinc, а потом подключил через Сервис - Надстройки. Всё так? Или можеь быть еще что-то надо было сделать?{/post}{/quote}  
 
При выборе сохранить как ... Надстройка Microsoft Office... Excel предлагает сохранить в папку AddIns - не сопротивляйтесь и согласитесь, сохранится аккурат где надо. Остальное так же...
 
The_Prist, VovaK, Юрий М и тот_кто_без_имени спасибо за внимание в моей проблеме.    
The_Prist, перепрописал фунцкии, некоторые стали работать нормально, но некотоые сохраняются нормально, но стоит только этот файл открыть на другом компьютере все равно пытаются найти надстройку на старом месте (т.е. где она лежит на исходном компьютере).  
Всё-таки, это наверное, происки врагов :)  
 
Методом проб и ошибок нашел следующее решение:  
Отключил в файлах (их мало) с пользовательским функциями автоматическое обновление и добавил вот такой макрос:  
 
Private Sub Workbook_Open()  
   Dim DiskName As String  
     
   DiskName = Left(ActiveWorkbook.Path, 1)  
     
   If DiskName <> "C" Then  
       On Error Resume Next  
       ChDir "C:\Documents and Settings\" & Application.UserName & "\Application Data\Microsoft\AddIns\моя_надстройка.xla"  
       ActiveWorkbook.ChangeLink Name:=DiskName & ":\AddIns\моя_надстройка.xla", NewName:= _  
           "моя_надстройка.xla", Type:=xlExcelLinks  
   End If  
     
   Calculate  
End Sub  
не совсем понял как он работает, но работает, такой вариант на данном этапе меня устраивает  
Еще раз спасибо всем за внимание
 
У меня таже самая проблема. И я ее не поборол :(
 

Посмотрите обсуждение похожей темы по ссылке: http://www.planetaexcel.ru/forum.php?thread_id=12235  Обратите внимание на сообщения участника Форума с ником смайлик :) Решение вопроса с привязкой надстройки к Книге.

 
Спасибо, посмотрел. Это не совсем то. :(
 
Код модуля ЭтаКнига книги, использующей функции надстройки MyFunc.xla:  
 
Private Sub Workbook_Open()  
 Const MyAddIn = "MyFunc.xla"  ' <-- менять здесь  
 Dim Lnk, Sh  
 On Error GoTo exit_  
 With ThisWorkbook  
   For Each Lnk In .LinkSources(Type:=xlExcelLinks)  
     If UCase(Lnk) Like UCase("*" & MyAddIn) Then  
       If UCase(Lnk) <> UCase(MyAddIn) Then  
         .ChangeLink Name:=Lnk, NewName:=MyAddIn  
         For Each Sh In .Worksheets  
           Sh.Calculate  
         Next  
         Exit For  
       End If  
     End If  
   Next  
 End With  
exit_:  
End Sub
 
Спасибо за код.  
Единственная проблема остается: нужно в 100 файлов прописать этот код :)
 
{quote}{login=Ромичь}{date=29.12.2009 09:26}{thema=}{post}Спасибо за код.  
Единственная проблема остается: нужно в 100 файлов прописать этот код :){/post}{/quote}  
Кто ж знал? Впишите в модуль ЭтаКнига надстройки следующий код:  
 
' ZVI:2009-12-29 http://www.planetaexcel.ru/forum.php?thread_id=11245  
' Автоматическое исправление ссылок на надстройку  
' Код в модуле ЭтаКнига надстройки  
Dim WithEvents App As Application  
 
Private Sub Workbook_Open()  
 Set App = Application  
End Sub  
 
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)  
 Dim MyAddIn, Lnk, Sh  
 MyAddIn = UCase(ThisWorkbook.Name)  
 On Error GoTo exit_  
 With Wb  
   For Each Lnk In .LinkSources(Type:=xlExcelLinks)  
     If UCase(Lnk) Like "*" & MyAddIn Then  
       If UCase(Lnk) <> MyAddIn Then  
         .ChangeLink Name:=Lnk, NewName:=MyAddIn  
         For Each Sh In .Worksheets  
           Sh.Calculate  
         Next  
       End If  
       Exit For  
     End If  
   Next  
 End With  
exit_:  
End Sub
 
Спасибо большое! Проблема решена.
Страницы: 1
Наверх