Страницы: 1
RSS
книга со своей панелью инструментов
 
Добрый день!  
Подскажите, плиз, как сделать чтобы книга всегда запускалась только с одной панелью инструментов, на которой расположены только необходимые стандартные кнопки, такие как: сохранить, копировать, вставить, повторить, отменить, печать, предварительный просмотр,....  
 
Ну и совсем прекрасно было бы, если пользователь не мог бы добавить другие панели или удалить назначенную по-умолчанию.  
 
Заранее спасибо
 
Можно скрывать макросом всё лишнее Пример в файле: http://excelvba.ru/XL_Files/Sample__06-10-2009__18-36-13.zip Вот весь код: Private Sub Workbook_BeforeClose(Cancel As Boolean) RestoreInterface End Sub Private Sub Workbook_Deactivate() RestoreInterface End Sub Private Sub Workbook_Open() UserInterface End Sub Private Sub Workbook_Activate() UserInterface End Sub Sub UserInterface(): ChangeInterface False: End Sub ' скрывает всё лишнее с экрана Sub RestoreInterface(): ChangeInterface True: End Sub ' восстанавливает всё как было Sub ChangeInterface(Value As Boolean) On Error Resume Next With Application .ScreenUpdating = False: .Caption = IIf(Value = True, Empty, "Мой заголовок окна Excel") .DisplayStatusBar = Value: .DisplayFormulaBar = Value For Each iCommandBar In .CommandBars iCommandBar.Enabled = Value Next With .ActiveWindow .Caption = IIf(Value = True, .Parent.Name, "") .DisplayHeadings = Value: .DisplayGridlines = Value .DisplayHorizontalScrollBar = Value: .DisplayVerticalScrollBar = Value: .DisplayWorkbookTabs = Value End With: .ScreenUpdating = True .CommandBars("Standard").Enabled = True End With End Sub
 
Аналогичная тема была здесь: http://www.programmersforum.ru/showthread.php?t=41839 И вопрос спецам на похожую тему: Как известно, свойство CommandBars есть как у объекта application, так и у объекта workbook. Это мне подсказывает, что можно как-то добавить к книге свою панель инструментов, и чтобы эта панель инструментов СОХРАНЯЛАСЬ ВМЕСТЕ С КНИГОЙ. Я в таких случаях при открытии книги макросом формирую панель инструментов заново. А есть ли способ добавить в конкретную книгу (а не в сам Excel) простенькую панель инструментов, чтобы при открытии этой книги на любом компе появлялась та самая панель? (не создавая её макросом)
 
А почему если нажать закрыть документа, а в нем были сделаны изменения и выскакивает диалоговое окно: Хотите ли сохранить документ? И после этого отказаться от закрытия, то дополнительно появляется панель ввода формулы.  
Можно как-то от этого избавиться?
 
И еще попробовал в 2007 офисе, панели не скрываются: их вообще в 2007 нельзя скрывать или можно, но другим кодом?
 
{quote}{login=EducatedFool}{date=06.10.2009 04:40}{thema=}{post}Аналогичная тема была здесь: http://www.programmersforum.ru/showthread.php?t=41839  
 
 
И вопрос спецам на похожую тему:  
 
Как известно, свойство CommandBars есть как у объекта application, так и у объекта workbook.  
Это мне подсказывает, что можно как-то добавить к книге свою панель инструментов, и чтобы эта панель инструментов СОХРАНЯЛАСЬ ВМЕСТЕ С КНИГОЙ.  
Я в таких случаях при открытии книги макросом формирую панель инструментов заново.  
А есть ли способ добавить в конкретную книгу (а не в сам Excel) простенькую панель инструментов, чтобы при открытии этой книги на любом компе появлялась та самая панель? (не создавая её макросом){/post}{/quote}  
Панель инструментов можно создать вручную и вложить в книгу с помощью меню: Вид – Панели инструментов – Настройка – вкладка Панели инструментов – кнопки Создать и Вложить. Это возможно проделать в версиях Excel 2003 и предыдущих. Но такая вложенная панель будет работать и в Excel 2007, при этом она появится на на ленте на вкладке Надстройки.  
 
При первой загрузке книги с встроенной панелью инструментов Excel копирует из книги встроенную панель.  После этого такая копия панели становится уже принадлежностью Application т.е. панелей Excel (сохраняется в XLB-файле в папке "C:\Documents and Settings\<LOGIN>\Application Data\Microsoft\Excel\") и не удаляется автоматически при закрытии книги. Кроме того, в назначенных макросах контролов копии панели запоминается еще и путь, откуда загружалась книга, и этот путь в последствии автоматически не меняется. При последующих загрузках  книги с этой же встроенной панелью инструментов копирование панели (обновление) Excel больше не производит, так как находит у себя копию панели с аналогичным именем.  
 
Нюансы, которые необходимо учитывать:  
 
1. Копия панели инструментов остается жить в Excel-е, даже если книга (надстройка) не загружена. Такую панель когда-то придется удалять вручную или дополнительным кодом.  
 
2. К имени макроса (.OnAction=”ИмяМакроса”) кнопки такой панели Excel привязывает путь к той книге (надстройке), откуда была изначально скопирована панель. Если впоследствии надстройка будет перемещена и загружена из другой папки, то макросы с панели уже вызываться не будут. Потребуется вручную удалять панель и перезапускать Excel. Часто про эту особенность либо не знают, либо забывают. Вот типичная ситуация: решили сначала ппроверить какую-то надстройку со встроенной панелью, скопировали её во временную папку, проверили – понравилась, перенесли или скопировали куда положено и получили проблему: копия панели будет пытаться обращаться к макросам книги из папки первоначальной загрузки.  
 
Для исключения проблемы, описанной в п.2, нужно записать такой следующий в модуль ЭтаКнига книги/надстройки со встроенной панелью:  
 
Private Sub Workbook_Open()  
 On Error Resume Next  
 With Application.CommandBars("ИмяПанели")  
   .Visible = True  
   ' Прописать OnAction без пути к папке    
   .Controls(1).OnAction = "ИмяМакроса1"  
   .Controls(2).OnAction = "ИмяМакроса2"  
   ' … и т.д.  
 End With  
End Sub  
 
Private Sub Workbook_AddinUninstall()  
 On Error Resume Next  
 Application.CommandBars("ИмяПанели").Delete  
End Sub  
 
Private Sub Workbook_AddinInstall()  
 With Application.CommandBars("ИмяПанели")  
   .Visible = True  
   .Position = msoBarTop  
 End With  
End Sub
 
Владимир, большое спасибо за разъяснения!  
 
А я-то не мог понять, откуда эти панели потом оказываются в Excel (когда я создавал их для книги)  
Теперь вроде всё понятно.
 
{quote}{login=EducatedFool}{date=07.10.2009 06:52}{thema=}{post}Владимир, большое спасибо за разъяснения!  
 
А я-то не мог понять, откуда эти панели потом оказываются в Excel (когда я создавал их для книги)  
Теперь вроде всё понятно.{/post}{/quote}  
Игорь, а для меня когда-то было загадкой - как эти панели встроить в книгу. Помог метод "тыка", хотя где-то же это описано  :-)
 
Примеры и файлик с перечнем ID и переменных.
 
{quote}{login=VovaK}{date=07.10.2009 04:01}{thema=}{post}Примеры и файлик с перечнем ID и переменных.{/post}{/quote}  
 
В 2007 ни один пример не заработал.( - прогресс).
 
В Excel 2007 нет панелей инструментов с точки зрения VBA (CommandBars). Интерфейс в 2007 офисе строится на основе xml-програмирования. Там также можно скрыть все что угодно и написать свою панель инструментов - статичную либо динамическую, можно добавить ей контекстну зависимость. Но делается все это не в VBE, а в Блокноте. Посмотрите книги по этой теме, например "RibbonX Customizing the Office 2007 Ribbon"
 
{quote}{login=Dachnik_Garik}{date=10.10.2009 11:59}{thema=}{post}Но делается все это не в VBE, а в Блокноте. Посмотрите книги по этой теме, например "RibbonX Customizing the Office 2007 Ribbon"{/post}{/quote}  
 
 
Спасибо.По вашей наводке нашел ссылку - может кому интересно http://msdn.microsoft.com/ru-ru/magazine/cc163469.aspx  Но там уже действительно xml,C# или в лучшем случае VB.NET .
 
{quote}{login=ZVI}{date=07.10.2009 06:41}{thema=Re: книга со своей панелью инструментов}{post}{quote}{login=EducatedFool}{date=06.10.2009 04:40}{thema=}{post}Аналогичная тема была здесь: http://www.programmersforum.ru/showthread.php?t=41839  
 
 
Для исключения проблемы, описанной в п.2, нужно записать такой следующий в модуль ЭтаКнига книги/надстройки со встроенной панелью:  
 
Private Sub Workbook_Open()  
 On Error Resume Next  
 With Application.CommandBars("ИмяПанели")  
   .Visible = True  
   ' Прописать OnAction без пути к папке    
   .Controls(1).OnAction = "ИмяМакроса1"  
   .Controls(2).OnAction = "ИмяМакроса2"  
   ' … и т.д.  
 End With  
End Sub  
 
End Sub{/post}{/quote}  
 
Уважаемый ZVI! а если в пользовательской панели не только кнопки а еще и выпадающее меню с кнопками, что тогда еще в макрос дописать нужно. а то в этом виде макрос автоматически назначается и на кнопку из которой эта менюшка появлятся должна.
 
какая-то фигня получилась. попробую еще раз))  
 
Уважаемый ZVI! а если в пользовательской панели не только кнопки а еще и выпадающее меню с кнопками, что тогда еще в макрос дописать нужно. а то в этом виде макрос автоматически назначается и на кнопку из которой эта менюшка появлятся должна.
 
нашел решение. прописал на место кнопки с выпадающим списком пустой макрос:  
Sub A()  
End Sub  
 
но наверное есть более изящный способ?
 
{quote}{login=Petr}{date=15.10.2009 08:18}{thema=}{post}... а если в пользовательской панели не только кнопки а еще и выпадающее меню с кнопками, что тогда еще в макрос дописать нужно. а то в этом виде макрос автоматически назначается и на кнопку из которой эта менюшка появлятся должна.{/post}{/quote}  
В моем сообщении речь шла о причине и методе решения проблемы вложенной в книгу панели, которая автоматически копируется в Еxcel.    
В приведенном коде строка: ' … и т.д. означает, что для конкретной панели нужно прописать свой код.  
 
В общем случае, с учетом встроенных в панель меню, в т.ч. многоуровневых,  можно, например, поступить так:  
 
Private Sub Workbook_Open()  
 On Error GoTo exit_  
 With Application  
   .CommandBars("ИмяПанели").Visible = True  
   FixOnAction .CommandBars("ИмяПанели")  
 End With  
exit_:  
End Sub  
 
Sub FixOnAction(ctrl)  
 Dim c As CommandBarControl, s$, ch$, i&  
 For Each c In ctrl.Controls  
   If c.Type = msoControlPopup Then  
     FixOnAction c  
   Else  
     c.OnAction = Mid(c.OnAction, InStr(c.OnAction, "!") + 1)  
   End If  
 Next  
End Sub
 
Подскажите как можно настроить свою собственную панель инструментов под свой лад.  
Все 4 кнопки идут в строку подряд, что не очень удобно. Хотелось бы сделать 2*2, а не 4*1, чтобы 2 кнопки расположились в одной строке, а другие 2 кнопки под ними.  
Прикрепил файл как это сейчас выглядит  
 
И код:  
 
Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)  
With Application.CommandBars.Add(Name:="Рабочая панель инструментов", _  
       Position:=msoBarTop, MenuBar:=False, Temporary:=True)  
   .Visible = True  
 
   With .Controls  
 
With .Add(Type:=msoControlButton, ID:=1)  
   .Caption = "Замеры"  
   .TooltipText = "Замеры"  
   .Style = msoButtonCaption  
   .OnAction = "Module2.Measurement"      
End With  
 
With .Add(Type:=msoControlButton, ID:=1)  
   .Caption = "База данных"  
   .TooltipText = "База данных клиентов"  
   .Style = msoButtonCaption  
   .OnAction = "Module2.Restore"      
End With  
 
With .Add(Type:=msoControlButton, ID:=1)  
   .Caption = "Сортировка созвонов"  
   .TooltipText = "Сортировка Базы по датам созвонов"  
   .Style = msoButtonCaption  
   .OnAction = "Module6.Sort_second_call"      
End With  
 
With .Add(Type:=msoControlButton, ID:=1)  
   .Caption = "Сортировка входящих звонков от клиентов"  
   .TooltipText = "Сортировка входящих звонков от клиентов"  
   .Style = msoButtonCaption  
   .OnAction = "Module6.Sort_incoming_call"      
End With  
End With  
End With  
 
End Sub
Страницы: 1
Читают тему
Наверх