AFAIK вы не можете использовать VBA Excel для создания пользовательской вкладки в ленте Excel. Однако вы можете скрыть/сделать видимым ленточный компонент с помощью VBA. Кроме того, ссылка, о которой вы говорили выше, предназначена для MS Project, а не для MS Excel.
Я создаю вкладки для своих приложений/надстроек Excel, используя эту бесплатную утилиту под названием Custom UI Editor.
Изменить: для размещения нового запроса OP
Учебник
Вот короткий учебник, как и обещал:
-
После того, как вы установили пользовательский редактор пользовательского интерфейса (CUIE), откройте его и нажмите «Файл» | Откройте и выберите соответствующий файл Excel. Убедитесь, что файл Excel закрыт, прежде чем открывать его через CUIE. В качестве примера я использую новый рабочий лист.
-
Щелкните правой кнопкой мыши, как показано на рисунке ниже, и нажмите «Отдельный пользовательский интерфейс Office 2007». Он будет вставлять «customUI.xml»
-
Далее Нажмите на меню Вставить | Пример XML | Пользовательская вкладка. Вы заметите, что базовый код будет автоматически сгенерирован. Теперь вы готовы изменить его в соответствии с вашими требованиями.
-
Осмотрите код
label="Custom Tab"
: Замените «Пользовательская вкладка» на имя, которое вы хотите предоставить своей вкладке. Пока назовите это «Джером».В приведенной ниже части добавляется настраиваемая кнопка.
<button id="customButton" label="Custom Button" imageMso="HappyFace" size="large" onAction="Callback" />
imageMso
: Это изображение, которое будет отображаться на кнопке. «HappyFace» — это то, что вы сейчас увидите. Здесь можно загрузить больше идентификатора изображения.onAction="Callback"
: «Обратный вызов» — это имя процедуры, которая выполняется при нажатии кнопки.
Demo
При этом создайте 2 кнопки и назовите их «JG Button 1» и «JG Button 2». Позвольте сохранить счастливое лицо как образ первого и позволить сохранить «Солнце» для второго. Измененный код теперь выглядит следующим образом:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="MyCustomTab" label="Jerome" insertAfterMso="TabView">
<group id="customGroup1" label="First Tab">
<button id="customButton1" label="JG Button 1" imageMso="HappyFace" size="large" onAction="Callback1" />
<button id="customButton2" label="JG Button 2" imageMso="PictureBrightnessGallery" size="large" onAction="Callback2" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Удалите весь код, который был сгенерирован в CUIE, а затем вставьте вышеуказанный код вместо этого. Сохраните и закройте CUIE. Теперь, когда вы откроете файл Excel, он будет выглядеть следующим образом:
Теперь часть кода. Откройте редактор VBA, вставьте модуль и вставьте этот код:
Public Sub Callback1(control As IRibbonControl)
MsgBox "You pressed Happy Face"
End Sub
Public Sub Callback2(control As IRibbonControl)
MsgBox "You pressed the Sun"
End Sub
Сохраните файл Excel в качестве файла с поддержкой макроса. Теперь, когда вы нажимаете «Смайлик» или «Солнце», вы увидите соответствующее окно сообщения:
Надеюсь, это поможет!
Время на прочтение
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.
Нажмите ОК, чтобы вернуться к электронной таблице.
Наша вкладка «Макросы» появилась, как мы и надеялись. Тем не менее, он немного пуст в данный момент.
Чтобы дать ему некоторую функциональность, давайте разберем несколько основных макросов
Создание макросов
Во-первых, мы собираемся создать очень, очень простой макрос, чтобы понять основы.
Создание макроса времени и даты
Сначала перейдите на вкладку « Разработчик » и нажмите « Макросы» .
Введите имя макроса dateandtime и затем нажмите Create .
Excel откроет редактор Visual Basic. Добавьте следующий код:
Sub dateandtime() MsgBox Now End Sub
Это говорит Excel, чтобы представить окно сообщения пользователю и заполнить это окно сообщения с текущим временем и датой, согласно команде Now . Сохраните свою работу — не забывая сохранять свою электронную таблицу как файл с поддержкой макросов, если вы еще этого не сделали — и возвращайтесь в Excel.
Нажмите « Макросы» на вкладке « Разработчик » еще раз, на этот раз выделите дату и время и нажмите « Выполнить» .
Вы должны увидеть что-то вроде этого:
Наш макрос сообщения работает! Теперь давайте попробуем что-нибудь более сложное.
Создание макроса автозаголовка
Еще раз откройте диалоговое окно «Макросы», введите имя заголовка и нажмите « Создать» .
Введите следующий код в разделе Sub customheaders () :
Range("A1").Value = "Date" Range("B1").Value = "Title" Range("C1").Value = "Priority" Range("D1").Value = "Status" Range("E1").Value = "Finished?"
Это заполнит ячейки в скобках после команды Range соответствующей текстовой строкой. Конечно, вы можете переключать заголовки на все, что захотите, и расширять список по мере необходимости.
Добавьте эту строку кода внизу:
Range("A1:E1").Font.Bold = True
Это применимо к полужирному форматированию. о каждом заголовке. Если вы добавили дополнительные заголовки, не забудьте отрегулировать ячейки в скобках, следуя команде Range .
Теперь пришло время вернуться в Excel и посмотреть, работает ли наш макрос как надо.
Это действительно так. Этот макрос удобен, если вы настраиваете новые рабочие листы, которые содержат новые данные каждую неделю или месяц. Как только мы добавим этот макрос на нашу панель инструментов, мы сможем заполнять эти заголовки одним щелчком мыши, а не каждый раз вводить их вручную.
Теперь еще один макрос.
Создание макроса связанной электронной таблицы
Сначала создайте новую таблицу и сохраните ее. Затем откройте документ, с которым мы работали ранее, и перейдите к « Разработчик» > « Макросы» . Введите название таблицы и нажмите « Создать» .
Введите следующий код ниже Sub connectedspreadsheet () :
Workbooks.Open ("C:UsersbradjDesktopMake Use OfVBA Toolbarholiday availability.xlsx")
Однако вам нужно поменять путь к только что созданной таблице. Чтобы выяснить это, перейдите к документу в проводнике, щелкните его правой кнопкой мыши и выберите « Свойства» .
Этот макрос открывает указанную книгу. Я использую график доступности праздников, на который мне приходится часто ссылаться при просмотре другой таблицы, поэтому для меня имеет смысл иметь прямую ссылку на этот файл на моей панели инструментов.
Сохраните свою работу и вернитесь в Excel, чтобы проверить ее.
Это прекрасно работает. Когда я запускаю макрос, связанная электронная таблица открывается сразу. Теперь нам просто нужно добавить все эти макросы на нашу панель инструментов.
Заполнение панели инструментов
Откройте вкладку « Макросы », которую мы создали ранее, и щелкните правой кнопкой мыши на ленте. Выберите « Настроить ленту» .
Используйте команды «Выбрать команды» из выпадающего меню и выберите « Макросы» .
Вы должны увидеть три макроса, которые мы сделали ранее. Выделите каждый из них и используйте кнопку « Добавить» , чтобы вставить его в новую группу на вкладке « Макросы ».
Выделите каждый макрос и нажмите « Переименовать», чтобы придать им более презентабельный ярлык, и добавьте пользовательский значок.
Теперь у нас есть полнофункциональная панель инструментов, которая предлагает мгновенный доступ к тем макросам, которые мы создали.
Сделайте панель инструментов, которая работает для вас!
Всем известно, что Excel является невероятно мощным программным обеспечением.
Он может делать что угодно, и в результате настройки по умолчанию могут быть немного сложными.
Excel действительно вступает в свои права, когда вы настраиваете его для собственного использования. Если вы можете создать собственную панель инструментов, состоящую из ваших собственных специализированных макросов, вы наверняка будете более продуктивными. Никто не знает ваш рабочий процесс лучше, чем вы, поэтому никто не в лучшем положении, чтобы сэкономить потраченное время, где это возможно.
Все, что вам нужно, это немного знать VBA, и это пугающая перспектива, если вы не опытный кодер. Однако на самом деле это не так сложно, как может показаться, особенно если вы начнете с основ Довольно скоро вы будете готовы адаптировать свои собственные макросы, и это отличный навык, если вы серьезно относитесь к освоению Excel.
У вас есть совет по созданию макросов Excel? Вы ищете помощь в процессе создания панели инструментов? Присоединяйтесь к разговору в разделе комментариев ниже!
Изображение предоставлено: ARTIST через Shutterstock.com
Прикреплённая к статье надстройка содержит модуль, который может создавать панель инструментов любой сложности при запуске файла.
На панель можно добавлять как обычные кнопки, так и раскрывающиеся выпадающие списки, подменю, текстовые поля.
Формирование панели инструментов происходит при загрузке файла, при закрытии же его — созданная панель скрывается:
Private Sub Workbook_Open() ФормированиеПанелиИнструментов End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) GetCommandBar(PROJECT_NAME, True).Visible = False End Sub
Основной код модуля:
' ВНИМАНИЕ! Наличие константы PROJECT_NAME ОБЯЗАТЕЛЬНО! Public Const PROJECT_NAME = "Addin CommandBar" ' список допустимых элементов управления на пользовательской панели инструментов Public Enum CONTROL_TYPES ct_BUTTON = msoControlButton ct_TEXTBOX = msoControlEdit ct_COMBOBOX = msoControlComboBox ct_DROPDOWN = msoControlDropdown ct_POPUP = msoControlPopup End Enum Function Add_Control(ByRef Comm_Bar, ByVal ControlType As CONTROL_TYPES, ByVal B_Face As Integer, _ ByVal On_Action As String, ByVal B_Caption As String, _ Optional ByVal Button_Style As MsoButtonStyle = msoButtonIcon, _ Optional ByVal Begin_Group As Boolean = False, _ Optional Tag As String = "") As CommandBarControl ' добавляет контролы в меню Comm_Bar, возвращает ссылку на созданный пункт меню On Error Resume Next Set Add_Control = Comm_Bar.Controls.Add(Type:=ControlType, Temporary:=True) ' создаём новый контрол With Add_Control If B_Face > 0 And ControlType = ct_BUTTON Then .FaceId = B_Face ' назначаем кнопке иконку .Tag = Tag: .OnAction = On_Action: .Caption = B_Caption ' параметры контрола .BeginGroup = Begin_Group ' добавляем разделитель (при необходимости) If ControlType = ct_BUTTON Then .Style = Button_Style End With End Function
Function GetCommandBar(ByVal CommandBarName As String, Optional ByVal Clean As Boolean = False, _ Optional ByVal Position As MsoBarPosition = msoBarFloating) As CommandBar On Error Resume Next: Err.Clear ' получаем ссылку на пользовательскую панель инструментов Set GetCommandBar = Application.CommandBars(CommandBarName) If Err.Number Then ' если панель не найдена - создаём её Set GetCommandBar = Application.CommandBars.Add(CommandBarName, Position, False, True) End If If Clean Then ' перебираем на ней все элементы, и удаляем их For Each cbc In GetCommandBar.Controls: cbc.Delete: Next End If GetCommandBar.Visible = True ' отображаем панель инструментов End Function Sub УдалениеПанелиИнструментов() GetCommandBar PROJECT_NAME, True End Sub Sub ФормированиеПанелиИнструментов() On Error Resume Next: Application.ScreenUpdating = False ' получаем ссылку на пользовательскую панель инструментов Set AddinMenu = GetCommandBar(PROJECT_NAME, True) ' добавление новых элементов управления на панель Add_Control AddinMenu, ct_BUTTON, 271, "CreateBackup", "Create Backup and Save", , True Add_Control AddinMenu, ct_BUTTON, 1099, "MainMacro", "Запуск основного макроса", msoButtonIconAndCaption, True Add_Control(AddinMenu, ct_TEXTBOX, 0, "ComboChanged", "Курс EURO", , True, "EURO").Text = "Курс EURO" Add_Control(AddinMenu, ct_TEXTBOX, 0, "ComboChanged", "Курс USD", , False, "USD").Text = "Курс USD" Add_Control AddinMenu, ct_BUTTON, 395, "GetRatesFromInternet", "Получить курс с сайта Центробанка", False Dim combo As CommandBarControl ' добавляем выпадающий список Set combo = Add_Control(AddinMenu, ct_COMBOBOX, 548, "ComboChanged", "Выбор продукции", , True, "ПРОДУКЦИЯ") ' добавляем позиции (пункты) в выпадающий список For i = 1 To 10: combo.AddItem "Позиция " & i: Next i combo.Text = "выберите позицию" ' текст комбобокса по умолчанию combo.Width = 145 ' изменяем ширину выпадающего списка на панели инструментов Add_Control AddinMenu, ct_BUTTON, 280, "RenamePhotoes", "Переименование фотографий", , True Dim popup As CommandBarControl ' добавляем выпадающее меню Set popup = Add_Control(AddinMenu, ct_POPUP, 548, "", "Доп. макросы", , True) For i = 1 To 5 ' добавляем пункты в подменю popup Add_Control popup, ct_BUTTON, 70 + i, "AdditionalMacros", "Дополнительный макрос " & i, False, , CStr(i) Next i Add_Control AddinMenu, ct_BUTTON, 222, "EditWorkPlan", "Перейти к редактирования техзадания на программу", , True Add_Control AddinMenu, ct_BUTTON, 1088, "SetIsAddinAsTrue", "Скрыть листы файла программы", , True Add_Control AddinMenu, ct_BUTTON, 1087, "SetIsAddinAsFalse", "Отобразить листы файла программы", , False Add_Control AddinMenu, ct_BUTTON, 548, "ShowFormSettingsPage", "Настройки", , True End Sub
Sub SetIsAddinAsFalse() On Error Resume Next: ThisWorkbook.IsAddin = False End Sub Sub SetIsAddinAsTrue() On Error Resume Next: ThisWorkbook.IsAddin = True End Sub Sub CreateBackup() ' сохраняет файл надстройки, и создаёт резервную копию файла в специальной папке On Error Resume Next If Not ThisWorkbook.Saved Then ThisWorkbook.Save ' сохранение файла ' формируем путь к папке для резервных копий программы BackupsPath = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, PROJECT_NAME & " Backups") ' создаём папку, если она не существует MkDir BackupsPath ' формируем путь для файла резервной копии Filename = PROJECT_NAME & "_BACKUP_" & Format(Now, "DD-MM-YYYY__HH-NN-SS") & ".xls" ' создаём копию файла надстройки ThisWorkbook.SaveCopyAs BackupsPath & Filename End Sub
Sub ComboChanged() ' срабатывает при изменении значения в комбобоксе или текстбоксе On Error Resume Next НазваниеКомбобокса = Application.CommandBars.ActionControl.Tag ТекстКомбобокса = Application.CommandBars.ActionControl.Text MsgBox "Новое значение: """ & ТекстКомбобокса & """", _ vbInformation, "Изменения в полесписке """ & НазваниеКомбобокса & """" End Sub Sub AdditionalMacros() ' срабатывает при нажатии одной из кнопок в подменю On Error Resume Next НомерМакроса = Application.CommandBars.ActionControl.Tag MsgBox "Параметр макроса = """ & НомерМакроса & """", vbInformation, "Запущен макрос из подменю" End Sub
- 79488 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Содержание
- 1 Добавление вкладки на ленту
- 2 Создание макросов
- 2.1 Создание макроса времени и даты
- 2.2 Создание макроса автозаголовка
- 2.3 Создание макроса связанной электронной таблицы
- 3 Заполнение панели инструментов
- 4 Сделайте панель инструментов, которая работает для вас!
Готовы увеличить производительность в Excel? Пользовательская панель инструментов может сделать это.
Хорошо сделанный макрос Excel
может выполнить трудоемкую задачу в один клик, что довольно удобно. Это еще удобнее, когда вы создаете пользовательскую панель инструментов, содержащую все ваши наиболее часто используемые макросы.
Прикрепление макроса к кнопке
Это одно из решений, но бывают случаи, когда было бы здорово встроить эти функции в интерфейс Excel. Выполнив следующие действия, вы можете поместить свои макросы прямо на ленте.
Вот как можно начать на вашей пользовательской панели инструментов.
Добавление вкладки на ленту
Во-первых, мы собираемся добавить нашу собственную вкладку на ленту, которая будет содержать нашу панель инструментов. Щелкните правой кнопкой мыши и выберите Настроить ленту.
На следующем экране нажмите Новая вкладка.
Выделите вашу новую вкладку, затем нажмите переименовывать. Я собираюсь назвать мои макросы, но вы можете выбрать все, что захотите.
Нажмите Хорошо вернуться к таблице.
Наша вкладка «Макросы» появилась, как мы и надеялись. Тем не менее, он немного пуст в данный момент.
Чтобы дать ему некоторую функциональность, давайте разберем несколько основных макросов
,
Создание макросов
Во-первых, мы собираемся создать очень, очень простой макрос, чтобы понять основы.
Создание макроса времени и даты
Сначала отправляйтесь в разработчик вкладка и нажмите макрос.
Введите имя макроса Дата и время а затем нажмите Создайте.
Excel откроет редактор Visual Basic. Добавьте следующий код:
Sub dateandtime()
MsgBox Now
End Sub
Это говорит Excel, чтобы представить окно сообщения пользователю и заполнить это окно сообщения текущими временем и датой, в соответствии с Сейчас команда. Сохраните свою работу — не забывайте сохранять свою таблицу
как файл с поддержкой макросов, если вы еще этого не сделали, — и возвращайтесь в Excel.
Нажмите макрос в разработчик вкладка еще раз, и на этот раз выделите Дата и время и нажмите Бежать.
Вы должны увидеть что-то вроде этого:
Наш макрос сообщений работает! Теперь давайте попробуем что-нибудь более сложное.
Создание макроса автозаголовка
Откройте диалоговое окно Macros еще раз, и на этот раз введите имя customheaders и нажмите Создайте.
Введите следующий код под Sub customheaders ():
Range("A1").Value = "Date"
Range("B1").Value = "Title"
Range("C1").Value = "Priority"
Range("D1").Value = "Status"
Range("E1").Value = "Finished?"
Это заполнит ячейки в скобках после Спектр Команда с соответствующей текстовой строкой. Конечно, вы можете переключать заголовки на все, что захотите, и расширять список по мере необходимости.
Добавьте эту строку кода внизу:
Range("A1:E1").Font.Bold = True
Это будет применять жирное форматирование
к каждому заголовку. Если вы добавили дополнительные заголовки, не забудьте отрегулировать ячейки в скобках после Спектр команда.
Теперь пришло время вернуться в Excel и посмотреть, работает ли наш макрос как надо.
Это действительно так. Этот макрос удобен, если вы настраиваете новые рабочие листы, содержащие новые данные каждую неделю или месяц. Как только мы добавим этот макрос на нашу панель инструментов, мы сможем заполнять эти заголовки одним щелчком мыши, а не каждый раз вводить их вручную.
Теперь еще один макрос.
Создание макроса связанной электронной таблицы
Сначала создайте новую таблицу и сохраните ее. Затем откройте документ, с которым мы работали ранее, и перейдите к разработчик > макрос. Введите имя linkedspreadsheet и нажмите Создайте.
Введите следующий код ниже Подчиненная таблица ():
Workbooks.Open ("C:UsersbradjDesktopMake Use OfVBA Toolbarholiday availability.xlsx")
Однако вам нужно поменять путь к только что созданной таблице. Чтобы выяснить это, перейдите к документу в проводнике, щелкните его правой кнопкой мыши и выберите свойства.
Этот макрос открывает указанную книгу. Я использую график доступности праздников, на который мне приходится часто ссылаться при просмотре другой таблицы, поэтому для меня имеет смысл иметь прямую ссылку на этот файл на моей панели инструментов.
Сохраните свою работу и вернитесь в Excel, чтобы проверить ее.
Работает отлично. Когда я запускаю макрос, связанная электронная таблица открывается сразу же. Теперь нам просто нужно добавить все эти макросы на нашу панель инструментов.
Заполнение панели инструментов
Открой макрос вкладку мы создали ранее и щелкните правой кнопкой мыши на ленте. Выбрать Настроить ленту.
Использовать Выберите команды из выпадающее меню и выберите макрос.
Вы должны увидеть три макроса, которые мы сделали ранее. Выделите каждый и используйте добавлять кнопка, чтобы вставить его в Новая группа под макрос Вкладка.
Выделите каждый макрос и нажмите переименовывать чтобы дать им более презентабельный ярлык и добавить пользовательский значок.
Теперь у нас есть полнофункциональная панель инструментов, которая предлагает мгновенный доступ к тем макросам, которые мы создали.
Сделайте панель инструментов, которая работает для вас!
Все знают, что Excel — невероятно мощная программа
,
Он может делать что угодно, и в результате настройки по умолчанию могут быть немного сложными.
Excel действительно вступает в свои права, когда вы настраиваете его для собственного использования. Если вы можете создать собственную панель инструментов, состоящую из ваших собственных специализированных макросов, вы наверняка будете более продуктивными. Никто не знает ваш рабочий процесс лучше, чем вы, поэтому никто не в лучшем положении, чтобы сэкономить потраченное время, где это возможно.
Все, что вам нужно, это немного знать VBA, и это пугающая перспектива, если вы не опытный кодер. Тем не менее, это действительно не так сложно, как может показаться, особенно если вы начинаете с основ VBA
, Довольно скоро вы будете готовы адаптировать свои собственные макросы, и это отличный навык, если вы серьезно относитесь к освоению Excel.
У вас есть совет по созданию макросов Excel? Вы ищете помощь в процессе создания панели инструментов? Присоединяйтесь к разговору в разделе комментариев ниже!
Изображение предоставлено: ARTIST через Shutterstock.com