{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 DataMicrosoftExcel») и не удаляется автоматически при закрытии книги. Кроме того, в назначенных макросах контролов копии панели запоминается еще и путь, откуда загружалась книга, и этот путь в последствии автоматически не меняется. При последующих загрузках книги с этой же встроенной панелью инструментов копирование панели (обновление) 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
Хотя большинство панелей инструментов, которые вы создаете, подходят для практически любой задачи, иногда функциональность пользовательской панели инструментов применима только к одной определенной книге. Этот трюк позволит привязывать панели инструментов к соответствующим книгам.
Если вы когда-либо создавали пользовательскую панель инструментов, то, без сомнения, замечали, что она загружается и становится видимой независимо от того, какую книгу вы открыли. А что если пользовательская панель инструментов содержит записанный макрос, предназначенный только для одной специфической рабочей книги? Вероятно, лучше всего было бы привязать специальные пользовательские панели к соответствующим книгам, чтобы исключить беспорядок и неразбериху. Это можно сделать, вставив немного очень простого кода в частный модуль рабочей книги, что такое рабочая книга вы можете узнать на странице http://www.cyberforum.ru/ms-excel/.
Чтобы попасть в частный модуль, правой кнопкой мыши щелкните значок Excel в левом верхнем углу экрана рядом с меню Файл (File), и в контекстном меню выберите пункт Исходный текст (View Code).
[stextbox id=»warning»]Этот путь недоступен на Маc. Чтобы открыть редактор VBE (Visual Basic Editor), нужно нажать сочетание клавиш Option+F11 или выбрать команду Tools → Macro → Visual Basic Editor. Открыв редактор, в окне Projects щелкните, удерживая клавишу Ctrl, или щелкните правой кнопкой мыши пункт This Workbook.[/stextbox]
Затем введите код из листинга 1.18.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Листинг 1.18 Private Sub Workbook_Activate() On Error Resume Next With Application.CommandBars("MyCustomToolbar") .Enabled » True .Visible = True End With On Error GoTo 0 End Sub Private Sub Workbook_Deactivate() On Error Resume Next Application.CommandBars("MyCustomToolbar").Enabled = False On Error GoTo 0 End Sub |
Измените текст MyCustomToolbar на имя вашей пользовательской панели инструментов. Чтобы вернуться обратно в окно Excel, закройте окно модуля или нажмите сочетание клавиш Alt/Apple+Q. Если вы откроете или активируете другую книгу, ваша панель инструментов исчезнет и станет недоступной. Снова активируйте соответствующую книгу, и — сюрприз! — панель вернется.
Вы можете даже углубить эту задачу, ограничив пользовательскую панель инструментов только определенным листом в рабочей книге. Правой кнопкой мыши щелкните ярлычок с названием листа, для которого должна быть доступна панель инструментов, и в контекстном меню выберите команду Исходный текст (View Code). Введите код, приведенный в листинге 1.19.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Листинг 1.18 Private Sub Worksheet_Deactivate() On Error Resume Next Application.CommandBars("MyCustomToolbar").Enabled = False On Error GoTo 0 End Sub Private Sub Worksheet_Activate() On Error Resume Next With Application.CommandBars("MyCustomToolbar") .Enabled = True .Visible = True End With On Error GoTo 0 End Sub |
Теперь нажмите сочетание клавиш Alt/Apple+Q или закройте окно, чтобы вернуться в Excel.
Первая процедура (Worksheet_Deactivate) будет автоматически запускаться каждый раз, когда вы будете покидать выбранный лист, активируя другой. При этом значение свойства Enable вашей пользовательской панели инструментов меняется на значение False, запрещая ее отображение. Вторая процедура будет запускаться каждый раз, когда вы будете активировать нужный лист, устанавливая значение свойства Enable равным True и отображая пользовательскую панель инструментов.
Строка кода Application.CommandBars("MyCustomToolbar").Visible = True
заново выводит вашу панель инструментов, чтобы она стала видна пользователю. Перейдите на другой лист, и панель пропадет; снова активируйте выбранный лист, и панель, как по мановению волшебной палочки, появится.
Настройка ленты только для одного файла |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Время на прочтение
1 мин
Количество просмотров 9.7K
Если перед вам стоит задача по автоматизации чего-нибудь в excel, то забудьте про макросы, расположенные непосредственно в книге, создавайте панель инструментов (ribbon), которая
- не зависит от конкретного файла
- располагается в основной панели инструментов
- дает кастомизируемый UI
Для того что бы создать такую панель вам потребуется
1) файл excel с расширением xlam, расположенный в %userprofile%appdataroamingmicrosoftaddins
2) редактор xml ресурса (для разметки кнопок)
3) определить кнопки по примеру
button id="b_MemberSelect" label="Member Select" onAction="p_MemberSelect" imageMso="ReturnToTaskList" size="large"
где p_MemberSelect это процедура VBA
4) в иницилазации процедуры (в файле xlam) нужно передавать предопределенные параметры
Sub p_MemberSelect(ByVal vIRibbonControl As IRibbonControl)
Но у данного решения есть одно ограничение — нет возможности создавать формы, встроенные в панели Excel, например:
Этот пример из проекта In2Sql (плагин для Excel, который визуализирует объекты SQL). В этом плагине код создан с помощью c# и библиотек VSTO.
Содержание
- Общая информация
- Лента
- Создание пользовательской формы
- Элементы управления в панели инструментов
- Элементы управления формой
- Элементы управления ActiveX
- Пример
- Переключатели
- Поле со списком
- Список
- Счётчик
- Встроенный объект для ввода данных Excel
- Как в Excel нарисовать линию
- Как в Excel нарисовать стрелку
- Изображения
- Значки
- Трехмерные модели
- Рисование
- Панель быстрого доступа
Общая информация
Интерфейс Excel 2010 является дальнейшим развитием пользовательского интерфейса, который впервые был использован в выпуске системы Microsoft Office 2007. При создании интерфейса разработчиками была поставлена задача: сделать основные приложения Microsoft Office удобнее в работе. В результате был создан пользовательский интерфейс Microsoft Office Fluent, который упрощает для пользователей работу с приложениями Microsoft Office и дает возможность быстрее получать лучшие результаты.
В предыдущих выпусках приложений Microsoft Office пользователям предоставлялась система меню, панелей инструментов, диалоговых окон. Такой интерфейс работал хорошо, пока в приложениях было ограниченное число команд. Теперь, когда программы выполняют намного больше функций, пользователям становится нелегко работать со старой системой: слишком много программных возможностей, и их трудно найти.
В Office Fluent дизайн пользовательского интерфейса был переработан, чтобы упростить процедуры поиска и использования всего диапазона возможностей, предоставляемых этими приложениями. Кроме того, предполагалось предотвратить загромождение рабочей области — ради того, чтобы пользователи меньше отвлекались на поиск и могли больше времени и энергии тратить на свою работу.
Лента
Главный элемент пользовательского интерфейса Microsoft Excel 2010 представляет собой ленту, которая идет вдоль верхней части окна каждого приложения, вместо традиционных меню и панелей инструментов (рис. 1.1).
Рис. 1.1. Лента
С помощью ленты можно быстро находить необходимые команды (элементы управления: кнопки, раскрывающиеся списки, счетчики, флажки и т.п.). Команды упорядочены в логические группы, собранные на вкладках.
Заменить ленту панелями инструментов или меню предыдущих версий приложения Microsoft Excel нельзя.
Удалить ленту также нельзя. Однако, чтобы увеличить рабочую область, ленту можно скрыть (свернуть).
- Нажмите кнопку Свернуть ленту, расположенную в правой части линии названий вкладок (рис. 1.2).
Рис. 1.2. Сворачивание ленты
- Лента будет скрыта, названия вкладок останутся (рис. 1.3).
Рис. 1.3. Окно со свернутой лентой
Ленту можно свернуть и иначе.
- Щелкните правой кнопкой мыши в любом месте ленты (см. рис. 1.2 ).
- В контекстном меню выберите команду Свернуть ленту.
Для использования ленты в свернутом состоянии щелкните по названию нужной вкладки, а затем выберите параметр или команду, которую следует использовать. Например, при свернутой вкладке можно выделить текст в документе Excel, щелкнуть вкладку Главная и в группе Шрифт выбрать нужный размер шрифта. После выбора размера шрифта лента снова свернется.
Чтобы быстро свернуть ленту, дважды щелкните имя активной вкладки. Для восстановления ленты дважды щелкните вкладку.
Чтобы свернуть или восстановить ленту, можно также нажать комбинацию клавиш Ctrl + F1.
Внешний вид ленты зависит от ширины окна: чем больше ширина, тем подробнее отображаются элементы вкладки. На рисунках приведено отображение ленты вкладки Главная при различной ширине окна.
Рис. 1.4. Отображение ленты вкладки Главная при ширине окна 1024 точки
Рис. 1.5. Отображение ленты вкладки Главная при ширине окна 800 точек
Создание пользовательской формы
Чтобы создать пользовательскую форму, выполните следующие действия:
- Нажмите вкладку РАЗРАБОТЧИК на ленте.
- Нажмите Visual Basic. Откроется окно Visual Basic для книги.
- Нажмите Вставить,
- Выберите UserForm из выпадающего списка.
Пользовательская форма появляется в правой части окна.
Элементы управления в панели инструментов
Пользовательская форма будет иметь разные компоненты. Когда вы нажимаете на любой из компонентов, вам либо будут предоставлены инструкции о том, что и как должна быть предоставлена информация, либо вам будут предоставлены варианты (варианты) для выбора. Все это обеспечивается с помощью элементов управления ActiveX в панели инструментов пользовательской формы.
Excel предоставляет два типа элементов управления – элементы управления формы и элементы управления ActiveX. Вы должны понимать разницу между этими двумя типами элементов управления.
Элементы управления формой
Элементы управления формой – это оригинальные элементы управления Excel, которые совместимы с более ранними версиями Excel, начиная с Excel версии 5.0. Элементы управления формой также предназначены для использования на листах макроса XLM.
Вы можете запускать макросы с помощью элементов управления формы. Вы можете назначить существующий макрос элементу управления, или написать или записать новый макрос. При нажатии на элемент управления макрос. Вы уже научились вставлять командную кнопку из элементов управления формы на листе для запуска макроса. Однако эти элементы управления не могут быть добавлены в пользовательскую форму.
Элементы управления ActiveX
Элементы управления ActiveX могут использоваться в пользовательских формах VBA. Элементы управления ActiveX имеют широкие свойства, которые можно использовать для настройки их внешнего вида, поведения, шрифтов и других характеристик.
У вас есть следующие элементы управления ActiveX в UserForm ToolBox –
- Указатель
- этикетка
- Текстовое окно
- Поле со списком
- ListBox
- CheckBox
- OptionButton
- Рамка
- Кнопка-переключатель
- CommandButton
- TabStrip
- MultiPage
- Полоса прокрутки
- в полях ввода
- Образ
В дополнение к этим элементам управления Visual Basic предоставляет функцию MsgBox, которую можно использовать для отображения сообщений и / или запроса пользователя о действии.
В следующих нескольких разделах вы поймете эти элементы управления и MsgBox. Затем вы сможете выбрать, какой из этих элементов управления требуется для разработки пользовательской формы.
Пример
Разберем конкретный пример применения сразу нескольких Элементов управления. В файле примера с помощью элементов управления показано как пользователь может отредактировать значения в таблице (диапазон F9:K12 ).
С помощью одного из 3-х элементов управления Поле со списком, Список и Счетчик , пользователь может выбрать столбец таблицы (год) . Нужный элемент управления выбирается с помощью группы Переключателей . Название выбранного элемента подсвечивается серым цветом (см. A8:B8 на рис. выше). Выбранный год выделяется в таблице Условным форматированием темно серым цветом (см. H9 :H12 на рис. выше). Отображение этого выделения регулируется Флажком (фон флажка – красный). Полосами прокрутки можно редактировать Цену и Количество в выбранном году, но только в определенном диапазоне.
Переключатели
На листе использовано 3 Переключателя объединенных в Группу . Каждому Переключателю соответствует определенный элемент управления: Поле со списком, Список, Счетчик .
Для объединения Элементов в группу помещаем на лист Элемент управления Группа (через меню ). В рамках группы создаем 3 переключателя (также через меню ) и связываем их все с одной ячейкой С2 (выделив элемент управления, правой клавишей вызываем контекстное меню, Формат объекта …, вкладка Элемент управления ).
Удерживая клавишу CTRL выделяем 3 переключателя и элемент Группа , вызываем правой клавишей мыши контекстное меню и выбираем . Теперь при выборе одного из трех Переключателей в Группе , в ячейке С2 будет выводиться значение 1, 2 или 3.
Поле со списком
Теперь вставим элемент управления Поле со списком . Вставить элемент можно через меню: . В ячейках столбца М введем несколько значений лет: 2009, 2010, 2011, 2012, 2013. Эти значения будут использованы в элементе Поле со списком .
Создадим Именованный диапазон Список .
- выделяем диапазон М9:М12
- нажимаем