Показано с 1 по 3 из 3

Тема: Visual Basic for Applications (Создание меню)

  1. #1
    Senior Member Аватар для Neutron
    Регистрация
    28.05.2008
    Сообщений
    688

    Visual Basic for Applications (Создание меню)

    Ну что поехали:
    Типы меню приложений
    Внутри приложений Word и Excel существует три типа меню:
    Головное меню – меню, которое выводится по умолчанию вверху окна приложения, выше всех других меню.
    Контекстное меню – меню, которое появляется при нажатии правой клавиши мыши на каком либо объекте (в частности на документе Word или книги Excel).
    Панель инструментов – меню, которое можно включить и выключить через стандартные пункты головного меню: Вид-Панель Инструментов.

    Обращение к меню
    Обращение к меню происходит через объекты CommandBars и ActiveMenuBar. Ниже приведены примеры обращения к свойству Index меню с именем “text” и к головному активному меню приложения:
    Ind = Application.CommandBars(“Text”).index
    Ind = Application.CommandBars.ActiveMenuBar.index

    Создание пустого меню
    Меню можно создать методом add объекта CommandBars.
    Ниже приведены два примера создание головного и контекстного меню:
    Application.CommandBars.Add Name:="Имя головного меню", _
    MenuBar:=True, temporary:=True
    Application.CommandBars.Add "Имя контекстного меню", msoBarPopup

    Примечание:
    Контекстное и головное меню созданное пользователем существует пока не закрыто приложение, после закрытия которого, контекстное и головное меню удаляется из него.

    Вывод меню
    Головное меню пользователя можно вывести через свойство Visible, а контекстное меню через метод ShowPopup. Если пользователь создал головное меню и вывел его, то оно заменяет стандартное меню приложения и существует пока приложение не закрыли, или пока это меню не удалили.

    Пример:
    Application.CommandBars("Имя контекстного меню").ShowPopup
    Application.CommandBars("Имя главного меню").Visible = True

    Удаление меню
    Меню пользователя можно удалить через свойство Delete. Через свойство Reset можно очистить меню пользователя или меню приложения от добавленных пунктов.

    Пример:
    Application.CommandBars("Имя меню").Delete

    Добавление пунктов в меню
    Пункт в меню добавляется методом Add объекта Controls, который является потомком объектов CommandBars и ActiveMenuBar.

    Пример:
    With CommandBars("Имя меню")
    ‘Установка указателя на объект добавляющий пункт меню
    Set mButton = .Controls.Add(Type:=msoControlButton, ID:=850)
    With mButton
    ‘задание свойств пункта меню
    .Caption = ”Мой пункт”
    .OnAction = ”МойПункт”
    End with
    End with

    В данном примере добавляется дополнительный пункт меню первого уровня. Входной не обязательный параметр Type метода Add используется для установки соответствующего типа добавляемого подпункта меню. Наиболее часто употребляемые значения этого свойства: msoControlButton – подпункт меню не содержит в себе других подпунктов, msoControlPopup – подпункт меню имеет продолжающийся список подпунктов следующего уровня. Если не обязательный, входной параметр ID метода Add имеет значение 850, то добавляемый пункт меню становится выделенным. После создания пункта меню задаются его свойства, о которых рассказано нами в главе Свойства и методы пункта меню.
    Ниже приведены процедуры, предназначенные для добавления пунктов меню:

    Private Sub ДанныеМеню(s As String, Группа As Boolean, _
    Пиктограмма As String, ИмяСобытия, Подпись, id1 As Long)

    Dim s1 As String, i as long
    If InStr(s, ",") <> 0 Then
    s1 = Mid(s, InStr(s, ",") + 1)
    s = Mid(s, 1, InStr(s, ",") - 1)
    Else
    s1 = ""
    End If
    If Mid(s, 1, 1) = "_" Or Mid(s, 1, 1) = "-" Then
    s = Mid(s, 2)
    Группа = True
    Else
    Группа = False
    End If
    Пиктограмма = ""
    While Mid(s, 1, 1) >= "0" And Mid(s, 1, 1) <= "9"
    Пиктограмма = Пиктограмма + Mid(s, 1, 1)
    s = Mid(s, 2)
    Wend
    If InStr(s, ";") <> 0 Then
    ИмяСобытия = Mid(s, 1, InStr(s, ";") - 1)
    Подпись = Mid(s, InStr(s, ";") + 1)
    Else
    ИмяСобытия = ""
    For i = 1 To Len(s)
    If Mid(s, i, 1) <> "&" And Mid(s, i, 1) <> " " Then
    ИмяСобытия = ИмяСобытия + Mid(s, i, 1)
    End If
    Next i
    Подпись = s
    End If
    If Подпись <> "" Then
    If Mid(Подпись, Len(Подпись), 1) = " " Then
    id1 = 850
    Else
    id1 = 1
    End If
    End If
    Подпись = RTrim(Подпись)
    s = s1
    End Sub

    Private Sub Добавление(Mbar, ByVal s As String)
    Dim mButton As Variant, Пункт As Long, i As Long
    Dim Пиктограмма As String, Группа As Boolean
    Dim ИмяСобытия, Подпись, id1 As Long

    ДанныеМеню s, Группа, Пиктограмма, ИмяСобытия, Подпись, id1
    With Mbar
    For i = 1 To 850 Step 849
    If s = "" Then
    Set mButton = .Controls.Add(Type:=msoControlButton, ID:=i)
    Else
    Set mButton = .Controls.Add(Type:=msoControlPopup)
    End If
    With mButton
    Пункт = .Index
    .Caption = Подпись
    If i = 1 Then
    .BeginGroup = Группа
    End If
    If s = "" Then
    .OnAction = ИмяСобытия
    If Пиктограмма <> "" Then
    .FaceId = Val(Пиктограмма)
    End If
    If i = id1 Then
    .Visible = True
    Else
    .Visible = False
    End If
    Else
    Exit For
    End If
    End With
    Подпись = Подпись + " "
    Next i
    End With

    While s <> ""
    ДанныеМеню s, Группа, Пиктограмма, ИмяСобытия, Подпись, id1
    With Mbar.Controls(Пункт)
    For i = 1 To 850 Step 849
    Set mButton = .Controls.Add(Type:=msoControlButton, ID:=i)
    With mButton
    .Caption = Подпись
    .OnAction = ИмяСобытия
    If i = 1 Then
    .BeginGroup = Группа
    End If
    If Пиктограмма <> "" Then
    .FaceId = Val(Пиктограмма)
    End If
    If i = id1 Then
    .Visible = True
    Else
    .Visible = False
    End If
    End With
    Подпись = Подпись + " "
    Next i
    End With
    Wend
    End Sub


    Sub ДобавитьПункты(ИмяМеню, ParamArray ПунктыМеню())
    Dim m As Variant, Mbar As Variant
    If ИмяМеню = "" Then
    ИмяМеню = Application.CommandBars.ActiveMenuBar.Name
    End If
    Set Mbar = Application.CommandBars(ИмяМеню)
    For Each m In ПунктыМеню
    Добавление Mbar, m
    Next m
    End Sub

    Sub ДобавитьПункты2(ИмяМеню, ПунктМеню1, ParamArray ПунктыМеню())
    Dim m As Variant, Mbar As Variant, Index As Long
    Dim Пиктограмма As String, Группа As Boolean
    Dim ИмяСобытия, Подпись, id1 As Long
    If ИмяМеню = "" Then
    ИмяМеню = Application.CommandBars.ActiveMenuBar.Name
    End If
    Set Mbar = Application.CommandBars(ИмяМеню)
    With Mbar
    ДанныеМеню (ПунктМеню1), Группа, Пиктограмма, ИмяСобытия, Подпись, id1
    With .Controls.Add(Type:=msoControlPopup)
    Index = .Index
    .Caption = Подпись
    .BeginGroup = Группа
    End With
    End With
    Set Mbar = Application.CommandBars(ИмяМеню).Controls(I nde
    For Each m In ПунктыМеню
    Добавление Mbar, m
    Next m
    End Sub

    Данные процедуры необходимо создать в модуле общих подпрограмм, того проекта, откуда будут добавляться пункты.
    Для непосредственного добавления пунктов в меню используются подпрограммы ДобавитьПункты, ДобавитьПункты2.
    Ниже приведена инструкция по входным параметрам данных процедур:
    Необходимо задать имя меню. Если параметр ИмяМеню процедуры добавляющей пункты имеет значение пустой строки, то пункты добавляются в головное меню приложения.
    Имена стандартных контекстных меню приложения Word следующие:
    "Text" -контекстное меню на выделенном тексте
    "Curve" - контекстное меню на выделенных линиях
    "Shapes" - контекстное меню на выделенных автофигурах
    Необходимо ввести имена событий в строковом формате через запятую.
    Имя события не должно содержать пробелов и символа &.
    Если нужно записать и имя события пункта меню, и подпись пункта меню их разделяют точкой с запятой.
    Если во введенном имени события содержатся пробелы и символ &, то эти символы автоматически удаляются из имени события, и если не указана подпись пункта меню, то в подпись пункта меню передается имя события с запретными символами.
    Перед именем события пункта меню можно ввести цифры, которые зададут код пиктограммы пункта меню(см. Коды пиктограмм пунктов меню). Но пункт меню, который имеет подпункты, не может иметь пиктограммы.
    Перед именем события пункта меню и перед цифрами задающими пиктограмму пункта меню можно ввести символ подчеркивания “_”, или символ минус “-”, при этом пункт меню будет отделен от других пунктов разделительной линией.
    Если необходимо подчеркнуть букву подписи, перед ней ставят символ &
    Если необходимо пометить пункт меню то подпись пункта меню должна заканчиваться пробелом (пункт меню, который имеет подпункты, не может быть выделен).
    Во входных параметрах ПунктыМеню могут иметься подпункты, которые отделяются от основного пункта меню запятой.
    Процедурой ДобавитьПункты можно добавить несколько пунктов первого уровня, и подпункты к ним. Процедурой ДобавитьПункты2 можно добавить только один пункт первого уровня (за один запуск данной процедуры), но к этому пункту можно добавить подпункты как второго, так и третьего уровня.
    Перед добавлением пунктов меню необходимо создать внутри проекта, из которого добавляются пункты меню, модуль общих подпрограмм, который будет содержать в себе процедуры, имена которых совпадают с именами событий пунктов меню(для пунктов меню, которые имеют подпункты, их задавать не требуется, так как процедуры ДобавитьПункты не задают соответствующие свойство OnAction для данных пунктов меню. см. Свойства и методы пунктов меню).

    Пример:
    ‘Добавление пунктов в стандартное контекстное меню “Text” приложения Word
    ДобавитьПункты2 "Техt", "Первый", _
    "ВторойПункт;Второй пункт 1,ДТретий", "-3Третий"



  2. #2
    Senior Member Аватар для Neutron
    Регистрация
    28.05.2008
    Сообщений
    688

    Re: Visual Basic for Applications (Создание меню)


  3. #3
    Senior Member Аватар для Neutron
    Регистрация
    28.05.2008
    Сообщений
    688

    Re: Visual Basic for Applications (Создание меню)

    Назначение управляющих клавиш к пункту меню
    Т.к. пункт меню через свойство OnAction может быть связан с процедурой не имеющей входных параметров, а процедура без входных параметров в VBA для Word и Excel является макросом, то назначение управляющих клавиш для соответствующих макросов, соответствует назначению управляющих клавиш для пунктов меню, которые закреплены за ними.
    Управляющие клавиши для макросов могут быть назначены через меню приложения и программно.

    Назначение управляющих клавиш макросам через меню приложений
    -В программе Word управляющие клавиши назначаются следующим образом:
    Войти в меню: Вид-Панель Инструментов-Настройка
    -В окне “Настройка” выбрать закладку “Команды” и кнопку “Клавиатура…
    -В появившемся окне в разделе “Категории:” выбрать – Макросы. В разделе “Макросы:” выбрать имя того макроса, в которому назначается горячая клавиша. В разделе “Сохранить изменения в…” выбрать тот документ, в котором сохранятся назначенные горячие клавиши к макросу.
    -Перейти в пункт: “Новое сочетание клавиш”
    -Нажать необходимую комбинацию управляющих клавиш.
    -Закрыть окно для назначения управляющих клавиш.

    В программе Excel управляющие клавиши назначаются следующим образом:
    -Войти в меню: Сервис-Макрос-Макросы
    -В появившемся окне выбрать необходимое имя макроса и нажать кнопку “Параметры
    -В появишемся окне в перейти в раздел “сочетание клавиш”
    -В разделе “сочетание клавиш” в режиме погашеного Caps Loock (прописные буквы) ввести латинскую букву в сочетании с клавишей Shift или без нее, и нажать кнопку ОК
    Примечание:
    Через меню приложения Excel можно назначить сочетание клавиш только в комбинации с клавишей CTRL или CTRL+SHIFT, но программно в данном приложении можно ввести и другие комбинации управляющих клавиш.

    Программное назначение управляющих клавиш макросам
    В приложении Excel программно можно назначить клавиши макросу через метод OnKey объекта Application. Метод OnKey имеет два входных параметра Key – для назначение комбинаций клавиш, и Procedure – для ввода имени макроса, которому назначаются управляющие клавиши (перед именем макроса может быть имя одной из загруженных книг Excel в которой макрос находится см. пример ниже. Имя книги общих макросов – “PERSONAL.XLS”). Если параметр Procedure опущен, то указанная комбинация клавиш снимается с макроса, на который она была установлена. Если параметр Procedure имеет значение пустой строки, то указанная комбинация клавиш блокируется в Excel. Комбинация клавиш задается в строковом формате, клавиши в строке кодируются следующим образом:
    Клавиша
    Тип клавиши
    Код клавиши

    CTRL
    Управляющие
    ^

    Alt
    %

    Shift
    +

    A
    Буквенные {A}

    B
    {B}

    0
    Цифровые
    0

    1
    1

    F1
    Другие
    {F1}

    Num Lock
    {NUMLOCK}

    <
    Стрелки
    {LEFT}

    >
    {RIGHT}

    ^
    {UP}

    v
    {DOWN}
    Пример:
    Application.onkey “%1”,”Пункт1”
    Application.onkey “^+{A}”,”’Моя книга.xls’!ПунктА”
    Application.onkey “^+{B}”

    В данном примере назначаются управляющие клавиши Alt+1 макросу Пункт1, и клавиши Ctrl+Shift+A макросу ПунктA находящемуся в Excel файле с именем “Моя книга”. И снимается зарезервированная комбинация управляющих клавиш CTRL+Shift+B с макроса проекта.
    В приложении Word управляющие клавиши макросу назначаются через метод Add объекта KeyBindings, и удаляются через метод Disable объекта FindKey. В методе Add объекта KeyBindings имеется входной параметр KeyCode, который определяет комбинацию управляющих клавиш, и входной параметр Command, который задает имя макроса. Функция BuildKeyCode предназначена для задания кода управляющих клавиш входному параметру KeyCode. Функция BuildKeyCode может иметь от одного, до 4 входных аргументов, которые задаются соответствующими константами:
    Клавиша
    Тип клавиши
    Имя константы

    CTRL
    Управляющие
    WdKeyControl

    Alt
    WdKeyAlt

    Shift
    wdKeyShift

    A
    Буквенные WdKeyA

    B
    WdKeyB

    0
    Цифровые
    WdKey0

    1
    WdKey1

    F1
    Другие
    wdKeyF1

    End
    wdKeyEND
    Через свойство CustomizationContext можно установить тип документа, в который добавляется, или в котором удаляется комбинация управляющих клавиш.

    Пример:
    ‘Начинаем работать с управляющими клавишами общих макросов документов
    CustomizationContext = NormalTemplate
    ‘управляющие клавиши Alt+M назначаются макросу с именем "Мой"
    KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyAlt, wdKeyM), _
    KeyCategory:=wdKeyCategoryMacro, Command:="Мой"
    ‘Начинаем работать с управляющими клавишами активного документа
    CustomizationContext = ActiveDocument
    ‘удаляем, ранее зарезервированные клавиши Ctrl+Alt+D
    FindKey(BuildKeyCode(wdKeyControl, wdKeyAlt, wdKeyD)).Disable


Похожие темы

  1. Копирайтинг создание уникального контента
    от Neutron в разделе Сайтостроение
    Ответов: 1
    Последнее сообщение: 25.07.2013, 09:04
  2. Сервера ---создание и настройка---
    от Гюнтер в разделе Компьютерные сети и Интернет провайдеры
    Ответов: 8
    Последнее сообщение: 10.11.2009, 21:11
  3. Создание сайта на SharePoint
    от maisa в разделе Сайтостроение
    Ответов: 4
    Последнее сообщение: 13.08.2009, 21:49
  4. кнопка в меню...
    от ZDI в разделе О сайте StavNet.info
    Ответов: 5
    Последнее сообщение: 27.04.2009, 15:33
  5. В меню солдат-призовников введут пиво
    от Scr в разделе Просто общение
    Ответов: 7
    Последнее сообщение: 12.10.2007, 22:01

Рекомендуем

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  

SEO by vBSEO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94