Страницы: 1
RSS
Как перенести настройки Excel на другой компьютер?
 
Ситуация, наверное, типичная…  
Я юзаю два компа: один на работе (под ХРюшей), другой дома (Виста). На обоих компах Excel-2003.  
Большую часть макросов в Personal.xls и доработок панелей управления (наделал много своих кнопочек для вызова макросов, своих менюшек со своими кнопочками, своих кнопочек в стандартных менюшках...) делаю на работе :-)  
Хочется и дома иметь такой же настроенный "под себя" Excel, как и на работе.  
Но к сожалению просто тупо подложить домашнему Ёкселю файл Excel11.xlb вместе с папочкой XLSTART нельзя, т.к. не совпадают пути к макросам, лежащим в Personal.xls  
А сидеть и просто в режиме настройки перепрописывать макросы, прикреплённые к каждой кнопочке жутко лень.  
The_Prist в топике "Перенос макросов на другой комп с изменением путей доступа к ним" ( http://www.planetaexcel.ru/forum.php?thread_id=19743 ) предлагал делать это макросом, который пройдётся циклом по всем кнопочкам менюшек и исправит у них путь, прописанный в OnAction:  
Sub Replace_Personal()   ' перенос макросов и настройки видимых панелей на другой компьютер  
   Const NewPath$ = "'C:\Users\MyNewUserName\AppData\Roaming\Microsoft\Excel\XLSTART­\PERSONAL.XLS'!" ' если переносить на Vista  
   'Const NewPath$ = "'C:\Documents and Settings\MyNewUserName\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLS'!" ' если переносить на XP  
   Dim cmdBar As Object, iBtn As Object, sPath$  
   For Each cmdBar In Application.CommandBars  
       If cmdBar.Visible Then  
           For Each iBtn In cmdBar.Controls  
               On Error Resume Next  
               sPath = iBtn.OnAction  
               If Len(sPath) > 0 Then  
                   If InStr(1, sPath, "'!", 1) > 0 Then iBtn.OnAction = NewPath & Mid(sPath, InStr(1, sPath, "!", 1) + 1)  
               End If  
           Next iBtn  
       End If  
   Next cmdBar  
End Sub  
 
Пробовал. Работает, но не полностью : переписывает пути только у тех кнопочек, которые видны на экране, а у тех кнопочек, которые не видны - нет.  
Попробовал убрать If cmdBar.Visible Then … - почему-то не помогло :-(    
Всё равно не правятся пути у кнопочек, спрятанных в недрах выпадающих менюшек...  
У кого-нибудь есть идеи, как "подпилить"?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Спасибо, Дмитрий.  
Будем попробовать.  
А что касается программно создаваемых меню и кнопок, то я не настолько крут чтобы это широко применять. Поэтому все кнопочки и менюшки у меня созданы вручную.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
вот поэтому надо делать все в надстройке - и создание меню и т.п.  
 
перенес код да ивсе
Живи и дай жить..
 
Не идёт.  
Затыкается на строке  
 
For Each oSubBtn In iBtn  
 
Говорит, что объект не поддерживает данное свойство или метод.  
Решил, что Дмитрий ошибся в значении параметра при проверке того, что это субменю. Посмотрел в справке, увидал, что могут быть 3 значения MsoBarType:  
msoBarTypeNormal == 0  
msoBarTypeMenuBar == 1  
msoBarTypePopup == 2  
 
Заменил в коде:  
If iBtn.Type = 1 Then ' msoBarTypeMenuBar  
 
Всё равно затыкается в коде на том же месте -  
For Each oSubBtn In iBtn
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
For Each oSubBtn In iBtn.Controls не пробовали?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Я Дмитрия-таки домучил на его сайте :)  
(<EM>http://www.excel-vba.ru/forum/index.php?topic=72</EM>)  
The-Prist доделал макрос, перепрописывающий у самодельных кнопок панелей управления все пути к макросам, лежащим в Personal.xls, при переносе на другой компьютер.  
А я его "покрыл лачком" и оформил в отдельный файл.  
Отлично работает. Очень удобно стало синхронизировать рабочий и домашний Ёксели.  
 
Вот, посмотрите, кому интересно. Может пригодиться.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
У Сержа есть отличная коробочка.)
 
{quote}{login=Alex_ST}{date=15.05.2011 10:46}{thema=}{post}Я Дмитрия-таки домучил на его сайте :)  
(<EM>http://www.excel-vba.ru/forum/index.php?topic=72</EM>)  
The-Prist доделал макрос, перепрописывающий у самодельных кнопок панелей управления все пути к макросам, лежащим в Personal.xls, при переносе на другой компьютер.  
А я его "покрыл лачком" и оформил в отдельный файл.  
Отлично работает. Очень удобно стало синхронизировать рабочий и домашний Ёксели.  
 
Вот, посмотрите, кому интересно. Может пригодиться.{/post}{/quote}  
 
спасибо, Алексей.  
и Вам, и, особенно, Дмитрию.  
пригодится, конечно.  
 
но у меня вопрос, если можно (файл не смотрел еще, если честно).  
а можно будет использовать этот макрос для разных версий Excel'я?  
если у меня дома 2003-й, а на работе 2002-й?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
С 2003 уже давненько не работал,но когда работал для переноса с кнопками и надстройками использовал штатный "мастер сохранения настроек". проблем не было. единственный минус наверное что нельзя перенести настройки только excel, но поскольку кроме него я ничего и не использовал ,то было не критично.
 
Я тут ещё чуть подпилил - сделал так, чтобы не вводить руками новый путь (он теперь вычисляется по расположению Personal.xls  
Намного удобнее стало  
 
Но всё равно меня гложут подозрения, что можно упростить - уж очень похожи циклы в процедурах Replace_Personal и Popup_Btns  
А нельзя ли как-то избавиться от цикла    
For Each oBtn In oCmdBar.Controls …Next oBtn    
в процедуре Replace_Personal, заменив его вызовом Popup_Btns?  
 
Тогда и оформлять ReplaceOnActionPath отдельной процедурой не будет необходимости, а можно будет её код внедрить в код процедуры Popup_Btns
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Дмитрий, если бы всё было так просто, я бы и не спрашивал.  
Я так уже пробовал делать - почему-то далеко не все кнопки и менюшки обрабатываются - примерно 30-40%  
Я для проверки вместо действительной замены OnAction делал Debug.Print нового OnAction.  
Посмотрите в приложенном примере, пожалуйста.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Дмитрий, вы как всегда правы.:)  
Перенёс On Error Resume Next в рекурсивную функцию и всё заработало.  
Осталось чуть подправить условие замены чтобы не все пути менялись, а только пути к Personal.xls (на всякий случай, чтобы не портились пути к макросам надстроек)  
Это не сложно. Сделаю сам. Сейчас подкинули срочную работу. Придётся отвлечься.  
Допилю - выложу финальный результат.  
 
-----  
75555
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Ну вот, теперь уже, кажется, финальный вариант :)  
Путь в OnAction теперь меняется только у тех кнопок, которые ссылаются на макросы, расположенные в Personal.xls  
Да и путь к Personal.xls самостоятельно вбивать в ячейки нет необходимости.    
 
А код, кстати, получился компактный настолько, что его можно даже просто модулем в Personal.xls хранить и при необходимости прямо в нём и запускать.  
 
Ну, или вот отдельным файлом:
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Ай! Один лишний апостроф! Извините...  
Вот  исправленная версия:
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Наверх