Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2009, 09:39   #1
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию Создать свое меню для макросов

Добрый день!
У меня стоит Excel 2007. Подскажите пожалуйста как сделать свое дополнительное меню для макросов.
Нашел интересную статью (http://www.vbstreets.ru/VBA/Articles/65843.aspx), но к сожалению действия согласно ей не принесли успеха(
Стандартное меню содержит пункты: Главная, вставка,разметка страницы ... вид. Мне бы хотелось, чтобы после пункта "Вид" появился мой пункт "Макросы" и в нем были нужные мне кнопочки.
nikolai_P вне форума Ответить с цитированием
Старый 17.03.2009, 10:04   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Может, это подойдёт?
http://forum.developing.ru/showthread.php?t=16516

Только тот макрос надо чуточку переделать...
Замените там msoBarPopup на msoBarFloating,
и запустите макрос СозданиеМеню_ЗаполнениеЭтогоМенюЭле ментами_и_ЕгоОтображение

В Excel 2003 получится что-то вроде этого:




В 2007-м проверяйте самостоятельно...
Там кнопки будут рисоваться на вкладке "Надстройки" (или какой-то подобной) ...
У меня нет 2007-го Excel, поэтому не смогу проверить макрос...

Последний раз редактировалось EducatedFool; 17.03.2009 в 10:11.
EducatedFool вне форума Ответить с цитированием
Старый 17.03.2009, 10:32   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот полностью работоспособный код для Excel 2003:

Код:
Sub СозданиеМеню()
    Dim p As CommandBarControl
    Set p = CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True, before:=5)
    p.Caption = "&Моё меню":    p.OnAction = "":    p.Tag = "MyMainMenu"    ' основное меню
    
    ' в данном варианте макроса очистка меню не требуется
    ' p.Reset '  - почему-то не работает ' очистка меню от прежних пунктов (если каждый раз добавляем разные пункты)
    ' For Each ctrl In p.Controls: ctrl.Delete: Next    ' а вот так пункты меню удаляются

    AddItemIntoMenu p, 1, 161, "Make_Netflow_Report", "Обработка результатов запроса"
    AddItemIntoMenu p, 4, -1, "SearchNumber", "Поиск номеров"

    Set NewMenu = p.Controls.Add(Type:=msoControlPopup)    ' подменю Additional Tools
    With NewMenu: .Caption = "&Additional Tools": .BeginGroup = True: End With

    AddItemIntoMenu NewMenu, 1, IIf(DemoMode, 232, 231), "ToggleDemoMode", _
                  IIf(DemoMode, "В&ыключить безопасный режим", "&Включить безопасный режим"), True, "Demo3"
    AddItemIntoMenu NewMenu, 1, 3, "Save_AddIn_Copy_in_Settings", "Сохранить копию программы в папке Settings", True
    AddItemIntoMenu NewMenu, 1, 749, "Save_AddIn_Copy", "Сохранить копию программы с указанием даты и времени"
    AddItemIntoMenu NewMenu, 1, 2936, "PrepareAddInForUpdate", "Создать файл обновления", False
    AddItemIntoMenu NewMenu, 1, 964, "Write_MainSettingsFile", "Перезаписать файл Main.ini", True
    AddItemIntoMenu NewMenu, 1, 161, "MakeSummaryPage", "Создание сводной таблицы", False

    AddItemIntoMenu NewMenu, 1, 3, "WriteDefaultRegistryValuesOnFirstRun", "Применить настройки по умолчанию", True
    AddItemIntoMenu p, 1, 1088, "SetIsAddinTrue", "Скрыть листы файла программы", True
    AddItemIntoMenu p, 1, 1087, "SetIsAddinFalse", "Отобразить листы файла программы", False
    AddItemIntoMenu p, 1, 1809, "Install_Update_Local", "Install_Update_Local", True
End Sub


Sub DeleteMenu(): On Error Resume Next    ' удаление меню 
    Dim cbc As CommandBarControl
    For Each cbc In Application.CommandBars(1).Controls
        If cbc.Caption = "&Моё меню" Then cbc.Delete
    Next:
End Sub


Function AddItemIntoMenu(ByRef Comm_Bar, ByVal B_Type As Integer, ByVal B_Face As Integer, _
                          ByVal On_Action As String, ByVal B_Caption As String, _
                          Optional ByVal Begin_Group As Boolean = False, Optional Tag As String = "") As CommandBarControl
' добавляет контролы в меню Comm_Bar ' type=1 - это кнопка, type=4 - это комбобокс, 10 - popup
    On Error Resume Next
    Set Add_Control = Comm_Bar.Controls.Add(Type:=B_Type)
    With Add_Control
        If B_Face > 0 Then .FaceId = B_Face:
        .Tag = Tag: .OnAction = On_Action: .Caption = B_Caption: If Begin_Group Then .BeginGroup = True
        'If надо_сделать_пункт_недоступным Then .Enabled = False
    End With
End Function
Посмотрите, как этот код будет работать в 2007-м...

Последний раз редактировалось EducatedFool; 17.03.2009 в 10:42.
EducatedFool вне форума Ответить с цитированием
Старый 17.03.2009, 13:27   #4
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию Все, я в тупике!

Методом проб и ошибок я все-таки кое как написал этот код вот он:
Код:
Const NameMenu = "МПС 2009"
Public MainMenu As CommandBar
_____________________________________________
Private Sub Workbook_Open()

On Error GoTo Line2

Application.CommandBars.Add NameMenu
Set MainMenu = Application.CommandBars(NameMenu)

MainMenu.Visible = True

With MainMenu

 Set mButton = .Controls.Add(Type:=msoControlButton, ID:=850)

 With mButton
  .Caption = "Сообщение"
  .OnAction = "ПоказатьСообщение"
 End With
End With

Line2:
Set MainMenu = Application.CommandBars(NameMenu)
End Sub
_______________________________________________
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MainMenu.Delete
End Sub
При открытии файла у меня появляется дополнительная вкладка "Надстройки" и в ней кнопочка.

Вопросы:
1. Можно ли изменить название "надстройка" на "Моя панель"
2. Если нет то можно изменить название "Настраиваемая панель инструментов"
3. Как задать кнопочке картинку созданную мной
4. Как задать ей нужные мне размеры, высоту и ширину?
Один словом чтобы получилось к примеру вот это:
nikolai_P вне форума Ответить с цитированием
Старый 17.03.2009, 18:28   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Я небезуспешно работал с настройкой ленты для Word 2007. С результатами моей работы можно ознакомиться в блоге, адрес которого у меня в профиле. Отвечу на вопросы:
  1. Нет
  2. Нет
  3. Невозможно
  4. Смотри мой блог
Можно создать свою группу на вкладке и даже свою вкладку, дать ей название. В этой группе можно размещать кнопки, чекбоксы, поля ввода, статические и динамические меню и много чего еще.
Вот так это может выглядеть:
Вся вкладка сделана мной с нуля. Размещение некоторых кнопок взято с этого документа Максима Новикова. На ней все необходимые инструменты. То, что выделено — компоненты, написанные мной, остальное — стандартные.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 18.03.2009 в 17:04.
viter.alex вне форума Ответить с цитированием
Старый 18.03.2009, 09:50   #6
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию По-моему Вы себе противоречите!

Уважаемый, viter.alex!

По-моему Вы себе противоречите или не внимательно прочитали мои вопросы, на которые Вы ответили:
Цитата:
1. Нет
2. Нет
3. Невозможно
4. Смотри мой блог
Далее Вы пишете что можно
Цитата:
создать свою группу на вкладке и даже свою вкладку... размещать кнопки, чекбоксы, поля ввода, статические и динамические меню и много чего еще.
Как-то не совсем я Вас понял!

Вкладка "Основная" я так понял создана Вами с нуля, соответственно ответ на первый вопрос - да, можно создать свою вкладку и дать ей Свое название.
Четкого ответа на второй вопрос в вашем посте я не нашел, но предполагаю, что это тоже возможно.
Третий вопрос можно переформулировать так: "Где офис хранит все свои картинки для кнопочек?"

P.S. Я правильно понял, что опиcанную панель вы создаете при помощи XML?
nikolai_P вне форума Ответить с цитированием
Старый 18.03.2009, 10:13   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Никаких противоречий. Вы спрашивали про стандартные элементы. Изменить названия стандартныч вкладок, картинки на стандартных кнопках нельзя. Можно скрыть ненужные группы или вкладки. Можно добавить свою группу на стандартную вкладку. А можно, как я, сделать полностью свою вкладку и делать с ней все, что душе угодно.
Я не знаю где офис хранит свои картинки. Но знаю как к ним обратиться. Можно задать свои картинки для кнопок, если умеете рисовать
Да, все это я делал через XML. На моем блоге есть ссылки на нужную для этого программу.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 18.03.2009, 14:41   #8
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию

Александр, помогите пожалуйста разобраться как все-таки сделать новую вкладку на ленте? Или может примерчик выложите?
nikolai_P вне форума Ответить с цитированием
Старый 18.03.2009, 15:08   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Вот пример (Вложение 9677), но не с вкладкой, а с группой на стандартной вкладке
Помести этот файл в c:\Documents and Settings\<UserName>\Application Data\Microsoft\Excel\XLSTART\.

Если ты был на моем блоге, то там есть ссылка на программу, которая позволяет редактировать XML-схему (автор Новиков Максим)

Посмотри файл. Посмотри блог, сайт Максима Новикова, думаю разберешься.
Где-то в этой ветке была тема, я все подробно расписывал для этого примера. Но по-моему ее удалили. . Пробуй.
Должно получится что-то такое:
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 15.04.2009 в 14:44.
viter.alex вне форума Ответить с цитированием
Старый 18.03.2009, 15:54   #10
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию

Вот рабочий пример (Пример.rar)! Если открыть этот файл с помощью программы Ribbon XML Editor v 1.3 (c) то на вкладке "Интерфейс (customUI.xml)" будет отображен код этого примера.
Скачать программу можно здесь http://novikovmaxim.narod.ru/product...Editor_1.3.rar
nikolai_P вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Панель для макросов shadowbeast Microsoft Office Word 6 18.03.2009 21:09
Автоматический запуск макросов с листа на котором указан перечень макросов с параметрами и без Neoli Microsoft Office Excel 2 09.03.2009 14:31
Для доступа к пунктам главного меню клавиши ALT + подчеркнутая буква меню в офис 2007? Окоча Юра Microsoft Office Word 1 24.02.2009 12:29
PopupMenu для формы свое, а для Edit - стандартное Виндоус yaver Общие вопросы Delphi 4 10.11.2008 15:03
Как место меню закрытия окна вставить что-то свое? chandrasecar Win Api 12 12.10.2008 01:45