Ранее я рассмотрел методы создания пользовательских форм и основы работы с ними (если вы никогда не работали с пользовательскими формами, рекомендую для начала прочитать указанную заметку). В настоящем материале приводится целый ряд практически полезных примеров пользовательских диалоговых окон.[1]
Рис. 1. Меню на основе элементов управления CommandButton или ListBox
Скачать заметку в формате Word или pdf, примеры в архиве
Создание меню
Меню можно создать с помощью элементов управления CommandButton (рис. 1; см. файл userform menus.xlsm) и с помощью элемента управления ListBox. Каждый элемент управления CommandButton имеет собственную процедуру обработки событий. Например, представленная ниже процедура выполняется после щелчка на кнопке CommandButton1:
Private Sub CommandButton1_Click() Me.Hide Call Macro1 Unload Me End Sub |
Эта процедура приводит к вызову макроса Macro1 и закрытию диалогового окна UserForm. После щелчка на других кнопках (отличных от CommandButton1) вызываются похожие процедуры обработки событий.
В случае использования элемента управления ListBox, перед отображением пользовательского диалогового окна вызывается процедура обработки события Initialize. В следующей процедуре используется метод Addltem для добавления шести опций в элемент управления ListBox:
Private Sub UserForm_Initialize() With ListBox1 .AddItem «Макрос1» .AddItem «Макрос2» .AddItem «Макрос3» .AddItem «Макрос4» .AddItem «Макрос5» .AddItem «Макрос6» End With End Sub |
Процедура обработки события привязывается к кнопке Выполнить:
Private Sub ExecuteButton_Click() Select Case ListBox1.ListIndex Case —1 MsgBox «Выберите макрос из списка.» Exit Sub Case 0: Me.Hide: Call Macro1 Case 1: Me.Hide: Call Macro2 Case 2: Me.Hide: Call Macro3 Case 3: Me.Hide: Call Macro4 Case 4: Me.Hide: Call Macro5 Case 5: Me.Hide: Call Macro6 End Select Unload Me End Sub |
Данная процедура проверяет значение свойства Listlndex элемента управления ListBox, чтобы определить, какой элемент выбран в списке (если свойство Listlndex равно –1, то не выбран ни один из элементов). После этого запускается соответствующий макрос.
Выбор диапазона в пользовательской форме
Некоторые встроенные диалоговые окна Excel предоставляют пользователю возможность выбирать диапазон. Например, диалоговое окно Подбор параметра, для вызова которого следует пройти по меню Данные –> Работа с данными –> Анализ «что если « –> Подбор параметра, запрашивает у пользователя два диапазона. Пользователь может или ввести имя диапазона непосредственно в окне, или применить мышь для выделения диапазона на листе.
Пользовательское диалоговое окно также обеспечивает подобную функциональность. Это достигается с помощью элемента управления RefEdit. Данный элемент выглядит иначе, чем элемент выбора диапазона во встроенных диалоговых окнах Excel, однако работает точно так же. Если пользователь щелкнет на небольшой кнопке в правой части элемента управления, то диалоговое окно временно исчезнет, а на экране будет отображен небольшой указатель выбора диапазона.
К сожалению, элемент управления RefEdit не позволяет использовать специальные клавиши при выделении диапазона (например, невозможно выделить ячейки до конца столбца, нажав комбинацию клавиш Shift+↓). Кроме того, после щелчка мышью на маленькой кнопке в правой части элемента управления (для временного сокрытия диалогового окна) можно применять только выделения с помощью мыши. Клавиатуру в этом случае применять нельзя.
На рис. 2 представлено пользовательское диалоговое окно с добавленным элементом управления RefEdit (см. файл range selection demo.xlsm). Это диалоговое окно выполняет простую математическую операцию над всеми не содержащими формул и непустыми ячейками указанного диапазона. Выполняемая операция задается активным переключателем OptionButton.
Рис. 2. С помощью элемента управления RefEdit можно выбрать диапазон
Элемент управления RefEdit возвращает текстовую строку, которая представляет выбранный диапазон. Можно преобразовать эту строку в объект Range. Для этого используется оператор:
Set UserRange = Range(RefEditl.Text)
Удачной практикой считается инициализация элемента управления RefEdit для представления текущего выделения. Для этого в процедуре UserForm_Initialize воспользуйтесь оператором:
RefEditl.Text = ActiveWindow.RangeSelection.Address
Для достижения наилучших результатов не помещайте элемент управления RefEdit внутри элемента Frame либо MultiPage. Это может привести к сбою в работе Excel. Элемент управления RefEdit не всегда возвращает действительный диапазон. Выделение диапазона указателем мыши — это один из способов присвоения значения данному элементу управления. Пользователь может ввести в поле любой текст, а также отредактировать или удалить уже отображаемый текст. Таким образом, предварительно необходимо убедиться, что диапазон является допустимым.
Следующий код — это пример одного из способов проверки допустимости введенного значения. Если определено, что значение неправильное, то пользователю выдается сообщение, а элемент управления RefEdit становится активным, предоставляя возможность ввести корректный диапазон.
On Error Resume Next Set UserRange = Range(RefEdit1.Text) If Err <> 0 Then MsgBox «Выбран некорректный диапазон» RefEdit1.SetFocus Exit Sub End If On Error GoTo 0 |
Пользователь может щелкнуть на вкладке одного из листов при выборе диапазона, применив элемент управления RefEdit. Поэтому не всегда выбранный диапазон находится на активном рабочем листе. Если пользователем выбран другой лист, то адрес диапазона указывается после имени листа, на котором этот диапазон находится. Если необходимо получить от пользователя выделение в виде одной ячейки, то можно указать верхнюю левую ячейку выделенного диапазона. Воспользуйтесь следующим оператором:
Set OneCell = Range(RefEditl.Text).Range("
Al"
)
Создание заставки
Некоторые разработчики предпочитают отображать определенную вступительную информацию при запуске приложения. Эта методика называется заставкой. Без сомнения, все пользователи видели заставку Excel, которая отображается несколько секунд при запуске программы. В приложении Excel заставку можно создать с помощью пользовательского диалогового окна. В приведенном ниже примере реализуется автоматическое отображение заставки, которое исчезает по истечении пяти секунд (рис. 3; см. файл splash screen.xlsm). Для создания заставки выполните следующие действия:
- Создайте рабочую книгу.
- Активизируйте редактор VBE и вставьте пользовательское диалоговое окно в проект. Код в этом примере предполагает, что объект UserForm называется UserForm1.
- Поместите любые необходимые элементы управления в только что созданное диалоговое окно UserForm1. Например, вам может понадобиться расположить элемент управления Image, который будет содержать логотип компании (рис. 3).
- Вставьте процедуру в модуль кода для объекта ЭтаКнига (ThisWorkbook):
Private Sub Workbook_Open() UserForm1.Show End Sub |
- Вставьте следующую процедуру в модуль кода для объекта UserForm1 (эта процедура обеспечивает пятисекундную задержку). Если нужно другое время задержки, измените значение аргумента функции TimeValue.
Private Sub UserForm_Activate() Application.OnTime Now + TimeValue(«00:00:05»), «KillTheForm» End Sub |
Рис. 3. Эта заставка на короткое время появляется на экране после открытия рабочей книги
- В общий модуль VBA вставьте следующую процедуру.
Private Sub KillTheForm() Unload UserForm1 End Sub |
При открытии рабочей книги будет выполнена процедура Workbook_Open и появится диалоговое окно UserForm (п. 4). В этот момент генерируется событие Activate, которое приводит к выполнению процедуры UserForm_ Activate (п. 5). Данная процедура использует метод OnTime объекта Application для выполнения процедуры KillTheForm в определенный момент времени. Однако предварительно определена задержка в пять секунд с момента возникновения события Activate. Процедура KillTheForm просто выгружает диалоговое окно UserForm из памяти.
- В качестве необязательного действия можно добавить элемент управления CommandButton с именем CancelButton, установить его свойство Cancel равным True и добавить представленную ниже процедуру обработки события в модуль кода формы UserForm.
Private Sub CancelButton_Click() Unload Me End Sub |
Таким образом, пользователь сможет закрыть заставку, прежде чем пройдет указанное время задержки. Окно будет закрыто также в результате нажатия клавиши <Esc>. Эту небольшую кнопку можно разместить за другим объектом, чтобы она не была видна.
Помните о том, что заставка не будет отображаться, если рабочая книга загружена не полностью. Другими словами, если нужно отобразить заставку только для того, чтобы пользователь не скучал во время загрузки рабочей книги, описанная выше методика не годится.
Для того чтобы выполнить VBA-процедуру при открытии документа, нужно так отобразить пользовательское диалоговое окно в немодальном режиме, чтобы код продолжал выполняться. Для этого измените процедуру WorkbookOpen следующим образом.
Private Sub Workbook_Open() UserForml.Show vbModeless ‘ другой код End Sub |
Отключение кнопки закрытия пользовательского диалогового окна
Если пользовательское диалоговое окно уже отображено на экране, щелчок на кнопке Закрыть в правом верхнем углу приведет к выгрузке формы UserForm из памяти. Иногда этого допускать нельзя. Например, иногда требуется, чтобы диалоговое окно UserForm закрывалось только после щелчка на специальной кнопке CommandButton. Несмотря на то что реально отключить кнопку Закрыть невозможно, вы вправе предотвратить закрытие диалогового окна, вызванное щелчком на этой кнопке. Для этого воспользуйтесь обработчиком события QueryClose (см. файл gueryclose demo.xlsm). Следующая процедура, которая расположена в модуле кода диалогового окна UserForm, выполняется перед закрытием формы (т.е. в момент возникновения события QueryClose).
Private Sub UserForm_QueryClose _ (Cancel As Integer, CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox «Щелкните на кнопке OK для закрытия формы.» Cancel = True End If End Sub |
Процедура UserForm_QueryClose использует два аргумента. Аргумент CloseMode содержит значение, которое указывает на причину возникновения события QueryClose. Если значение аргумента CloseMode равно vbFormControlMenu (встроенная константа), значит, пользователь щелкнул на кнопке Закрыть. В таком случае будет отображено сообщение (рис. 4); аргумент Cancel устанавливается равным True, и форма не закрывается.
Рис. 4. Процедура перехватывает закрытие окна, и оставляет его открытым
Имейте в виду, что пользователь может нажать клавиши <Ctrl+Break>, прекратив тем самым выполнение макроса. В рассматриваемом примере нажатие клавиш <Ctrl+Break> во время отображения формы UserForm на экране приведет к тому, что пользовательское диалоговое окно будет закрыто. Во избежание этого выполните следующий оператор до отображения пользовательского диалогового окна:
Application.EnableCancelKey = xlDisabled
Прежде чем добавить этот оператор, удостоверьтесь, что в приложении нет ошибок. В противном случае возникает опасность формирования бесконечного цикла.
Изменение размера диалогового окна
Во многих приложениях используются окна, которые могут изменять собственные размеры, добавляя кнопки и опции. Например, высота диалогового окна Excel Найти и заменить, которое отображается после выбора команды Главная –> Редактирование –> Найти и выделить –> Заменить, увеличивается после щелчка на кнопке Параметры.
Изменение размеров пользовательского диалогового окна осуществляется путем изменения значений свойств Width и Height объекта UserForm. На рис. 5а показано первоначальное диалоговое окно, а на рис. 5б показано это же окно после щелчка на кнопке Параметры. Обратите внимание на то, что надпись на кнопке изменяется в зависимости от размера диалогового окна (см. файл change userform size.xlsm).
Рис. 5. Диалоговое окно: вверху – в стандартном режиме; внизу – после нажатия на кнопке Параметры
Создавая пользовательское диалоговое окно, определите его максимальный размер, чтобы получить доступ ко всем элементам управления. После этого воспользуйтесь процедурой UserForm_Initialize для установки размеров диалогового окна по умолчанию.
В коде применяются две константы, определенные в верхней части модуля.
Const SmallSize As Integer = 124
Const LargeSize As Integer = 164
Пример предназначен для печати рабочих листов активной книги. Он позволяет пользователю указать листы, которые необходимо распечатать. Ниже приведена процедура обработки события, которая выполняется после щелчка на кнопке Параметры.
Private Sub OptionsButton_Click() If OptionsButton.Caption = «Параметры >>» Then Me.Height = LargeSize OptionsButton.Caption = «<< Параметры» Else Me.Height = SmallSize OptionsButton.Caption = «Параметры >>» End If End Sub |
Эта процедура проверяет значение свойства Caption объекта CommandButton и устанавливает значение свойства Height объекта UserForm в соответствии с полученным значением свойства Caption.
Если элементы управления не отображаются из-за того, что находятся за пределами границы диалогового окна, соответствующие этим элементам управления комбинации клавиш будут продолжать функционировать. В рассматриваемом примере пользователь может нажать клавиши <Alt+L> (для выбора альбомной ориентации страницы), даже если соответствующий элемент управления не отображается на экране.
Масштабирование и прокрутка листа в пользовательском диалоговом окне
Для прокрутки и масштабирования листа при активном диалоговом окне можно применить элемент управления ScrollBar (рис. 6; см. файл zoom and scroll sheet.xlsm). В этом примере масштаб можно изменять в диапазоне от 100 до 400%. Два элемента управления ScrollBar в нижней части диалогового окна позволяют прокручивать лист по горизонтали и по вертикали.
Рис. 6. Элементы управления ScrollBar позволяют прокручивать лист и изменять его масштаб
Элементы управления инициализируются в процедуре UserForm_Initialize:
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 |
Private Sub UserForm_Initialize() LabelZoom.Caption = ActiveWindow.Zoom & «%» ‘ Масштабирование With ScrollBarZoom .Min = 10 .Max = 400 .SmallChange = 1 .LargeChange = 10 .Value = ActiveWindow.Zoom End With ‘ Прокрутка по горизонтали With ScrollBarColumns .Min = 1 .Max = ActiveSheet.UsedRange.Columns.Count .Value = ActiveWindow.ScrollColumn .LargeChange = 25 .SmallChange = 1 End With ‘ Прокрутка по вертикали With ScrollBarRows .Min = 1 .Max = ActiveSheet.UsedRange.Rows.Count .Value = ActiveWindow.ScrollRow .LargeChange = 25 .SmallChange = 1 End With End Sub |
Эта процедура позволяет устанавливать значения различных свойств элементов управления ScrollBar. Значения определяются на основе данных, полученных из активного окна. При использовании элемента управления ScrollBarZoom выполняется процедура ScrollBarZoom_Change. Она устанавливает значение свойства Zoom объекта ActiveWindow равным значению свойства Value элемента управления ScrollBar. Кроме того, изменяется текст подписи, которая представляет текущий масштаб рабочего листа.
Private Sub ScrollBarZoom_Change() With ActiveWindow .Zoom = ScrollBarZoom.Value LabelZoom = .Zoom & «%» .ScrollColumn = ScrollBarColumns.Value .ScrollRow = ScrollBarRows.Value End With End Sub |
Прокрутка листа осуществляется с помощью двух процедур. Эти процедуры устанавливают значение свойств ScrollRow и ScrollColumns объекта ActiveWindow равными значениям свойств Value элементов управления ScrollBar.
Private Sub ScrollBarColumns_Change() ActiveWindow.ScrollColumn = ScrollBarColumns.Value End Sub Private Sub ScrollBarRows_Change() ActiveWindow.ScrollRow = ScrollBarRows.Value End Sub |
При нажатии на кнопку Ok пользовательская форма закрывается:
Private Sub OKButton_Click() Unload Me End Sub |
Применение элемента управления MultiPage
Элемент управления MultiPage применяется при отображении в пользовательских диалоговых окнах множества элементов управления. Элемент управления MultiPage позволяет группировать опции, а также размещать каждую группу на отдельной вкладке (рис. 7; см. файл multipage control demo.xlsm). Панель инструментов Toolbox также включает элемент управления TabStrip, напоминающий элемент управления MultiPage. Однако в отличие от MultiPage, элемент управления TabStrip не может включать другие объекты. Поскольку элемент управления MultiPage является более гибким, вряд ли вам придется обращаться к элементу управления TabStrip.
Рис. 7. Элемент управления MultiPage группирует элементы управления на страницах, доступ к которым обеспечивается с вкладки
Вкладка (или страница), которая отображается поверх всех остальных, определяется значением свойства Value элемента управления MultiPage. Значение 0 соответствует первой вкладке. Значение 1 вызывает отображение второй вкладки и т.д. По умолчанию элемент управления MultiPage состоит из двух страниц. Для того чтобы добавить дополнительные вкладки, щелкните на любой вкладке правой кнопкой мыши и в контекстном меню выберите пункт New Page.
При работе с элементом управления MultiPage щелкните на вкладке, чтобы установить свойства страницы. В окне Properties отобразятся свойства, значения которых можно изменить. Иногда сложно выделить сам элемент управления MultiPage, так как щелчок на нем приводит к выделению страницы элемента управления. Для того чтобы выделить только элемент управления, щелкните на его границе. Кроме того, можете воспользоваться клавишей <Таb> для циклического перемещения между элементами управления. Еще одним вариантом выделения элемента управления является выбор пункта MultiPage из раскрывающегося списка окна Properties.
Если элемент управления MultiPage содержит много вкладок, то присвойте его свойству MultiRow значение True, чтобы отобразить вкладки в несколько строк. Если необходимо, то вместо вкладок можно отображать кнопки. Достаточно изменить значение свойства Style на 1. Если значение свойства Style равно 2, элемент управления MultiPage не будет отображать ни вкладки, ни кнопки.
Свойство TabOrientation определяет расположение вкладок на элементе управления MultiPage. Для каждой страницы можно установить эффект перехода. Для этого воспользуйтесь свойством TransitionEffect. Например, щелчок на вкладке приведет к тому, что новая страница «отодвинет» старую. Применяйте свойство TransitionPeriod, чтобы задать скорость эффекта перехода.
Использование внешних элементов управления
Пример, рассматриваемый в этом разделе, основан на элементе управления Microsoft Windows Media Player. Несмотря на то что он не является элементом управления Excel (настраивается при установке Windows), он прекрасно работает с формами UserForm. Для того чтобы воспользоваться элементом управления Microsoft Windows Media Player выполните следующие действия:
- Активизируйте среду VBE.
- Создайте новую пользовательскую форму: Insert –> UserForm.
- Щелкните правой кнопкой мыши на панели Toolbox и в контекстном меню выберите параметр Additional Controls (Дополнительные элементы управления). Если окно Toolbox не отображается, выполните команду View –> Toolbox.
- В окне Additional Controls установите флажок Windows Media Player (рис. 8).
- Щелкните на кнопке ОК. Набор инструментов пополнится новым элементом управления.
Рис. 8. Подключение элемента управления Microsoft Windows Media Player
На рис. 9 показаны элемент управления Windows Media Player, встроенный в форму UserForm, а также окно Properties (см. также файл mediaplayer.xlsm, расположенный в отдельной папке). Свойство URL определяет URL-ссылку воспроизводимой композиции (музыкальная запись или видеоролик). Если композиция находится на жестком диске вашего компьютера, свойство URL определяет полный путь и имя соответствующего файла.
Рис. 9. Элемент управления Windows Media Player, встроенный в форму
На рис. 10 показан пример использования этого элемента управления. Для сокрытия окна, предназначенного для отображения видеороликов, была уменьшена высота окна элемента управления Windows Media Player. Также был добавлен список, созданный на основе элемента управления ListBox, в котором отображаются аудиофайлы MP3. После щелчка на кнопке Пуск начинается воспроизведение выбранного файла. Щелчок на кнопке Закрыть приведет к прекращению воспроизведения и к закрытию окна UserForm. Форма UserForm отображается в немодальном режиме, поэтому можно продолжать работу во время отображения диалогового окна.
Рис. 10. Элемент управления Windows Media Player в действии
Названия МРЗ-файлов в окне списка отображаются с помощью процедуры UserForm_Initialize. В целях упрощения алгоритма аудофайлы находятся в той же папке, что и рабочая книга. Можно реализовать и более гибкий подход, предусматривающий выбор пользователем папки, содержащей требуемые аудиофайлы.
Private Sub UserForm_Initialize() Dim FileName As String ‘ Заполнение списка MP3—файлами FileName = Dir(ThisWorkbook.Path & «*.mp3», vbNormal) Do While Len(FileName) > 0 ListBox1.AddItem FileName FileName = Dir() Loop ListBox1.ListIndex = 0 End Sub |
Код обработчика событий PlayButton_Click включает единственный оператор, который присваивает выбранное имя файла свойству URL объекта WindowsMediaPlayer1.
Private Sub PlayButton_Click() ‘ Свойство URL загружает трек и запускает плеер WindowsMediaPlayer1.URL = _ ThisWorkbook.Path & «« & ListBox1.List(ListBox1.ListIndex) End Sub |
Анимация элемента управления Label
Форма UserForm (рис. 11) представляет собой интерактивный генератор случайных чисел. Два элемента управления TextBox содержат верхнее и нижнее значения для случайного числа. Элемент управления Label изначально отображает четыре знака вопроса, а после щелчка мышью на кнопке Пуск отображаются анимированные случайные числа. При этом кнопка Пуск превращается в кнопку Остановить, а щелчок на ней мышью приводит к прекращению анимации и отображению случайного числа. Код, связанный с кнопкой генератора случайных чисел можно найти в модуле UserForm1 файла random number generator.xlsm.
Рис. 11. Генератор случайных чисел
Поскольку кнопка выполняет две функции (запуск и остановка анимации), в процедуре используется общедоступная переменная Stopped, с помощью которой отслеживается состояние кнопки. Первая часть процедуры состоит из двух структур If-Then, с помощью которых проверяется содержимое элементов управления TextBox. Два другая подобных оператора позволяют удостовериться в том, что меньшая величина действительно не превосходит большей величины. В следующем разделе кода осуществляется настройка размера шрифта элемента управления Label на основании максимальной величины. Цикл Do Until loop генерирует и отображает случайные числа. Обратите внимание на оператор DoEvents. Он позволяет Excel использовать все возможности операционной системы. Если бы его не было, элемент управления Label не смог бы отобразить каждое генерируемое случайное число. Другими словами, именно оператор DoEvents делает возможной анимацию.
Форма UserForm также включает элемент управления CommandButton, который выполняет функции кнопки Отмена. Этот элемент управления находится за пределами окна UserForm, поэтому невидим. Свойству Cancel элемента управления CommandButton присвоено значение True. Вследствие этого нажатие клавиши <Esc> дает тот же эффект, что и щелчок на кнопке Отмена. Соответствующая процедура обработки событий присваивает переменной Stopped значение True и выгружает форму UserForm.
[1] По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 439–449, 466–472.
Новое
меню в Excel, Word или PowerPoint обычно создается
средствами VBA, поскольку в этих приложениях
диалоговое окно «Настройка» не содержит
кнопки Свойства.
Новое
меню создается методом Add коллекции
CommandBars (Панели команд):
Выражение.
Add(Name,
Position, MenuBar, Temporary),
где
выражение
– обязательное
выражение, возвращающее объект
CommandBars, а все параметры в скобках
необязательны.Name
задает
имя нового меню;
PositioNопределяет
его положение (значения-константы
msoBarLeft, msoBarTop, msoBarRight, msoBarButtom определяют
положение меню слева, вверху, справа
или внизу окна, msoBarFloating задает «плавающее»
меню, msoBarPopup указывает, что новое меню
будет всплывающим).
Значение
True параметра MenuBar
указывает
на то, что новое меню заменит текущую
активную строку меню (по умолчанию –
False). Значение True параметра Temporary
означает,
что новое меню будет временным и исчезнет,
когда закроется содержащее его приложение
(по умолчанию – False).
В
следующем примере создается новое меню
«Головное
меню»:
Dim
CstmBar As CommandBar
Set
CstmBar = CommandBars.Add(Name:=»Головнoe
меню«,
Position:=msoBarTop,
MenuBar:=True, Temporary:=False)
Добавление
выпадающих меню
Чтобы
добавить новое меню программно, надо
использовать метод Add коллекции
CommandBarControls, применив его к объекту типа
CommandBar, который представляет панель
нашего меню. Данный метод позволяет
помещать на панель кнопки (CommandBarButton),
комбинированные списки (CommandBarComboBox) и
выпадающие меню (ComandBarPopup).
Вызов
метода
имеет
вид:
выражение.
Add(Type, Id, Parameter, Before, Temporary),
где
Выражение
должно
возвратить объект типа CommandBarsControl.
Параметры
в скобках необязательны. Параметр Туре
(Тип)
задает тип добавляемого объекта. Его
значение msoControlPopup указывает, что
добавляемый управляющий элемент –
выпадающее меню. Для пользовательских
меню параметры Id
и
Parameter
можно
опустить. Значение аргумента Before
– число,
указывающее положение нового элемента
в последовательности элементов панели:
если его нет, элемент помещается в конец.
Определить имя и ключ быстрого доступа
к созданному меню можно, задав значение
свойства Caption.
Пример
добавления выпадающего меню Ввод
документов панели
Головное
меню с
ключом быстрого доступа «В»:
Dim
CstmCtrl As CommandBarControl
Set
CstmCtrl = CstmBar.Controls.Add(Type:=msoControlPopup,
Before:=1)
CstmCtrl.CaptioN=
«&Ввод
документов»
Чтобы
добавить новое подменю программно, к
объекту, представляющему родительское
выпадающее меню, нужно применить метод
Add коллекции CommandBarControls. В качестве
параметра Туре (Тип) надо использовать
значение msoControlPopup.
В
следующем примере в конец выпадающего
меню Ввод
документов, расположенного
на панели меню Головное
меню, добавляется
подменю «о движении товаров»:
Dim
CstmPopUpi
As
CommandBarPopup
Set
CstmPopUpi =
stmCtrl.Controls.Add(Type:=msoControlPopup)
CstmPopUpi.CaptioN=
«о движении товаров»
Добавление
команд
Добавить
новую команду в меню можно, применив
метод Add коллекции CommandBarControls к объекту,
представляющему изменяемое меню. Для
того чтобы добавить собственную команду,
вставьте ее имя в меню, а затем в качестве
значения свойства OnActioNзадайте имя
VBA-процедуры, которая должна вызываться
при выборе данной команды. В качестве
значения аргумента Туре (Тип) метода
Add укажите msoControlButton, означающее, что
вставляемый в меню элемент будет
командой. Добавим команду «Накладная»
в выпадающее меню Ввод
документов из
панели Головное
меню. Выбор
этой команды запускает процедуру
Invoice:
Set
CstmCtrl = CstmPopUpi.Controls.Add(Type:=msoControlButton)
CstmCtrl.CaptioN=
«Накладная»
CstmCtrl.OnActioN=
«Module1.Invoice»
Метод
Add позволяет вставлять в меню и встроенные
команды. Для этого при вызове задайте
значение параметра Id, равное числовому
идентификатору данной команды в Office.
Поскольку в Office 2000 количество команд
доходит до 4000, в табл. 22 приведем основные
команды редактирования.
Таблица
22
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
/VBA Tips /How to Create a Menu with VBA
A useful feature of Office Applications like Excel and Word is that you can create your own menu’s and menu items. If you are creating an Add-In you will want to create a menu using VBA.
By doing so you can simply create the menu when your application is started and you can remove the menu again when your application is closed.
The following sub procedure demonstrates how to create a Command Bar and add a few buttons and popups. Both the captions and icons of a button are displayed.
Excel VBA: Different Types Of Excel Macros
How to Create a Menu with VBA
Notes
In VBA a menu is called a Command Bar. It is good practice to include error trapping to avoid error messages for unexpected events like a application crash.
In Excel 2007 the menu’s have been replaced with the ribbon. However, menu’s are still supported in these versions. Once loaded they are located under the tab ‘Add-Ins’.
Code
'Copy the following code to a new module ' Sub CreateMyMenu() Dim myCB As CommandBar Dim myCBtn1 As CommandBarButton Dim myCBtn2 As CommandBarButton Dim myCPup1 As CommandBarPopup Dim myCPup2 As CommandBarPopup Dim myCP1Btn1 As CommandBarButton Dim myCP1Btn2 As CommandBarButton ' Delete the CommandBar if it exists already On Error Resume Next Application.CommandBars("MyMenu").Delete ' Create a new CommandBar Set myCB = CommandBars.Add(Name:="MyMenu", Position:=msoBarFloating) ' Add button 1 to this bar Set myCBtn1 = myCB.Controls.Add(Type:=msoControlButton) With myCBtn1 .Caption = "1st Button" .Style = msoButtonCaption '<- force caption text to show on your button End With ' Add popup menu 1 to this bar - this is a menu that folds out Set myCPup1 = myCB.Controls.Add(Type:=msoControlPopup) myCPup1.Caption = "Statistics" ' Add button 1 to popup menu 1 Set myCP1Btn1 = myCPup1.Controls.Add(Type:=msoControlButton) With myCP1Btn1 .Style = msoButtonAutomatic .FaceId = 487 End With ' Add button 2 to popup menu 1 Set myCP1Btn1 = myCPup1.Controls.Add(Type:=msoControlButton) With myCP1Btn1 .Caption = "Click me!" .Style = msoButtonIconAndCaption .FaceId = 59 .OnAction = "SubItworks" '<- call the sub routine SubItWorks End With ' Add a second button to this bar Set myCBtn2 = myCB.Controls.Add(Type:=msoControlButton) With myCBtn2 .FaceId = 17 ' <- Face Id 17 is a barchart icon .Caption = "Barchart" '<- shows when hovering mouse over icon End With ' Show the command bar myCB.Visible = True End Sub Private Sub SubItWorks() MsgBox ("Eureka, it works!") End Sub
Excel VBA Tutorial : Workbook Events and Procedures
Usage
Normally you would want to create the menu when the application starts and delete the menu again when the application closes. To make that happen you will need to add another subroutine to the module that will unload the menu.
Sub DeleteMyMenu() On Error Resume Next CommandBars.FindControl(Tag:="MyMenu").Delete CommandBars("MyMenu").Delete End Sub
On the workbook code page you can add the following code to automatically load the menu at startup and unload it on exit.
Private Sub Workbook_BeforeClose(Cancel As Boolean) DeleteMyMenu End Sub Private Sub Workbook_Open() CreateMyMenu End Sub
Relevant URLs
MsoButtonStyle Enumeration for Office 2007 (applies to other versions as well)
Courtesy: vba & excel
Also See
- Excel Formula Vs Function : What is the difference?
- 7 Simple Tricks to Make Smart and Neat Excel Graphs
- 14 Advanced Excel Tips and Tricks for Basic to Intermediate Users
- How to Reduce Size of Excel Files? – Top 10 Tips
Related
�����: ������� ����������������
����� 10
�������� ������������ ��������� ����[9]
�������� ���� � ������� ����������� ���� ����������
�������� ������������ ���������� � ����������� ���������� �������������� ����������, ������ ���������� ��������� ������ ���������� � ����������� ��������� ����, ������� ��������� � ������� ����� ���� ����������. ����������� �������� ���� ��� ���������� ������� ����� �������������� �������, ������ ���������� ���� ���������� ��� ��������� VBA.
�� ���� ����������� Office ����� �������������� ����������� �������� ���� ���������, ��������� ��� ����� ���������� ���� ����������. ��� ��� ������ ����� � ���� ��� ������� ������� ������ ������������, � ����� � ����������� ������� � ������� ���������. ����� ���� ��������� ���:
1)��������� ������ ��������� �� ������� ������ ������������ (���. 117);
2)�� ����������� ���� ��������� ������ ������������ (���. 116) ������� ��� ������������ ����, � ������ ������ �������� ������ ��������� ���� ���������� ������� ��� ���������, ��� �������� ��������� ������ (�� Normal!) � �������� ������ ��. �� ������ �������� ��������� ������ � �������� ������ (���. 118);
3)���� ������ ���� ���������� (���. 119) � ������� ��������� �������� ����������� ������� ��� ���������� ����. � ���������� �� ������ �������� ������ ��������� ������ (���. 120).
���. 117. ���� �������� ����������� ������
���. 118. ���������� ���� ��������� ������ ������������
���������� ���������� ����
���� ������ ���������� ���� ��� ������� ���������, � ���, � ������� �� ��������� �������� ������ ����, ����� ��������� � ����� ���������� Office. �������� ���������� ���� ����������, � �����:
1)����� ��������������� ���� �� ������ ���, ��������� ������ ������ ����� � ������ ����������� ���� � ������ ������ ������������ �� ����������� ������� ������ ������������;
���. 119. ���� ����������
2)�� ������ ��������� �� ������� ������� �������� ����� ���� (���. 120);
3)��������� ������� ����� ���� ������ � ������ ������� � ���������� �� � �� ����, � �������� ����������� ����� ����. ��� ���� ���� �I� �������� �� �����, ���� ������� ��� ������ ���� (���. 120);
4)��������� ������ ������� ���� ����� ���� (��� ���������� ���� ���������), ������� ��� ����� ���� � ���� ��� (���. 121) ������������ ����.
���� ������ �������� ��� ������ ����, �� �� ������ ��� ��� �������� ������ �������������.
���. 120. �������� ������ ���� � �������� ���� ����������
���. 121. �������������� ������ ����
���������� �������
������� (��� �������� ����) ��������� � ������� ������� ������������� ���� �� ������ ��� �������, ������� �������� ���������� �������. ������� ����� ��������� � ���������� � ����������� ����, � ����� � � ������ �������. ������� ����������� ������ �������, ����� � ���� ����������� �������.
��� ���������� ������� ����� �������������� ���������� ���� ���������� � ������� �������������� ���� �������. ����� ����� ����� ����������� ���:
1)��� ������� ������� � ������ ��������� �������� ������� ����� ����;
2)��������� ������� ����� ���� ������ � ������ ������� � ���������� �� � �� ����� ����, ���� ����� �������� �������. ����� ���������� ���� ���������, ������� ��� ��������� � ��� ��������, ��������� ����� ���� ����� ��� ����������� ����. ��� ���� �������������� ����� ����� �������� �� ����� � ������ ������ ����������� ����, ���� ������� ��������� ������ �������;
3)��������� ������ ������� ���� ����� ���� � ������� ��������� ������ ������� � ���� ��� ������������ ����. ������ ��� ������ ��������� ������� ������ ��� ����� �� ���� �������� ������ ������� (���. 122).
���. 122. �������� �������
���������� ���������� �������
MS Office ��������� ��������� ������� � ����� ���������� � ���������������� ����, � ����� �������� ������� ���, ������������ � ��������� �������� ���� ������ ������ �� ������.
� ���������� ���� ���������� �������� �������������� ���� �������, � �����:
1)��� ������� ������� �������� � ������ ��������� ��������� ����������� ������� � ��� ������� ������ ��������� ����� �������� � ������ �������;
2)��������� ������� � ������ ������� � ���������� �� � �� ���� ��� �������, ���� ��� �����������. ����� ���������� ���� ��� ������� ���������, ������� ��������� � ��� ��������, ��������� ������� ����� ��������� ���������������� ����������� ���� ��� �������. �������������� ����� �������� ����� � ������ ������ ����������� ����, ���� ������� ��������� ������ ������� (���. 123).
���. 123. ���������� ���������� ������
����������� ������� ����� � �����: �������� �� ����� ���� � ������ �������� � ���������� �� � ���� ���� ��� ������� ������� Ctrl.
���������� ����������� �������
���������� ������� � ������� ���� ���������� � ����������� ��� ���������� ���� ������� �� ���������� Office, � ������� ��� �����������:
� Microsoft Excel. �������� ��� ��, ��� � ��� ������� ���������� �������, �������� � ������ ��������� ������� ������ (Macros) � ���������� ������� ������������� ������� ���� �� ������ ������� � ����. �������� ��� ������� ������ ������� ���� � �������� � ����������� ���� ������� ��������� ������. ����� ������� � ���� ��� ��� �������, ������� ������ ����������� �������� ����;
� Microsoft Word � Microsoft PowerPoint. ��� ��� ������� ���������� �������, �������� � ������ ��������� ������� ������� � ���������� � ���� ��� ������� ������� �� ������ ������� (���. 125, ��������� � ����� 2). ��� ����� �������������� ���������� ������� ������ (������) � ����������� ������ � ��������� (���. 124). ��������� �������� ������� ������� �� ���. 126.
���. 124. �������� ������� (������) ������� ������������� �����
���. 125. ����� ������� (������), ������������ �����
���. 126. ���������� ����������� ������� � ������������� ������ � �� ������
�������� �������
��� �������� ���������� ���� ���� � ���������� ���� ���������� ������� ������� �������������� ����, �������� ������ ������� ���� ��������� ������� � � ����������� ���� ������� ������� �������. ����� ������� ������� ���������������� ������ ����, ����� ������� �� ������� ������ ������������ ����������� ���� ���������� �, ������ � ������ ������ ������������ ��� ��������� ������ ����, �������� ������ �������.
�������������� ���������� ����������� ����
������������ ����� ������ ���������� ������� ����, ������� ��� ����� ������. ��� � ������ �������� ��� ����, ��� �������� � ���� ����������. ���� ��� ���� ������������� ��������� ����������� ���� ��� �������, �� ������ � ��� ������������� ���� ���� � ��� ��� �������.
� ���������� ���� ���������� ����� ������� ������� �������������� ����. �����, ������� ������ ������� ���� ��������� ����������� ���� ��� �������, ������� ����� ������������, �������� � ����������� ���� ������� �����.
����� ������������ ���������� ������ ����, ��������� �� ������� ������ ������������ ���� ����������, �������� � ������ ������ ������������ ��� ����������������� ������ ���� � �������� ������ �����.
�������� ���� � ������� VBA
����� ���� � Excel, Word ��� PowerPoint ������ ��������� ���������� VBA, ��������� � ���� ����������� ���������� ���� ���������� �� �������� ������ ��������. ����� ���� ��������� ������� Add ��������� CommandBars (������ ������):
���������. Add(Name, Position, MenuBar, Temporary),
��� ��������� � ������������ ���������, ������������ ������ CommandBars, � ��� ��������� � ������� �������������. Name ������ ��� ������ ����;
Position ���������� ��� ��������� (��������-��������� msoBarLeft, msoBarTop, msoBarRight, msoBarButtom ���������� ��������� ���� �����, ������, ������ ��� ����� ����, msoBarFloating ������ ���������� ����, msoBarPopup ���������, ��� ����� ���� ����� �����������).
�������� True ��������� MenuBar ��������� �� ��, ��� ����� ���� ������� ������� �������� ������ ���� (�� ��������� � False). �������� True ��������� Temporary ��������, ��� ����� ���� ����� ��������� � ��������, ����� ��������� ���������� ��� ���������� (�� ��������� � False).
� ��������� ������� ��������� ����� ���� ��������� �����:
Dim CstmBar As CommandBar
Set CstmBar = CommandBars.Add(Name:=»������oe ����»,
Position:=msoBarTop, MenuBar:=True, Temporary:=False)
���������� ���������� ����
����� �������� ����� ���� ����������, ���� ������������ ����� Add ��������� CommandBarControls, �������� ��� � ������� ���� CommandBar, ������� ������������ ������ ������ ����. ������ ����� ��������� �������� �� ������ ������ (CommandBarButton), ��������������� ������ (CommandBarComboBox) � ���������� ���� (ComandBarPopup). ����� ������ ����� ���:
���������. Add(Type, Id, Parameter, Before, Temporary),
��� ��������� ������ ���������� ������ ���� CommandBarsControl.
��������� � ������� �������������. �������� ���� (���) ������ ��� ������������ �������. ��� �������� msoControlPopup ���������, ��� ����������� ����������� ������� � ���������� ����. ��� ���������������� ���� ��������� Id � Parameter ����� ��������. �������� ��������� Before � �����, ����������� ��������� ������ �������� � ������������������ ��������� ������: ���� ��� ���, ������� ���������� � �����. ���������� ��� � ���� �������� ������� � ���������� ���� �����, ����� �������� �������� Caption.
������ ���������� ����������� ���� ���� ���������� ������ �������� ���� � ������ �������� ������� �»:
Dim CstmCtrl As CommandBarControl
Set CstmCtrl = CstmBar.Controls.Add(Type:=msoControlPopup,
Before:=1)
CstmCtrl.Caption = �&���� ����������
����� �������� ����� ������� ����������, � �������, ��������������� ������������ ���������� ����, ����� ��������� ����� Add ��������� CommandBarControls. � �������� ��������� ���� (���) ���� ������������ �������� msoControlPopup.
� ��������� ������� � ����� ����������� ���� ���� ����������, �������������� �� ������ ���� �������� ����, ����������� ������� �� �������� �������:
Dim CstmPopUpi As CommandBarPopup
Set CstmPopUpi =
stmCtrl.Controls.Add(Type:=msoControlPopup)
CstmPopUpi.Caption = �� �������� �������
���������� ������
�������� ����� ������� � ���� �����, �������� ����� Add ��������� CommandBarControls � �������, ��������������� ���������� ����. ��� ���� ����� �������� ����������� �������, �������� �� ��� � ����, � ����� � �������� �������� �������� OnAction ������� ��� VBA-���������, ������� ������ ���������� ��� ������ ������ �������. � �������� �������� ��������� ���� (���) ������ Add ������� msoControlButton, ����������, ��� ����������� � ���� ������� ����� ��������. ������� ������� ����������� � ���������� ���� ���� ���������� �� ������ �������� ����. ����� ���� ������� ��������� ��������� Invoice:
Set CstmCtrl = CstmPopUpi.Controls.Add(Type:=msoControlButton)
CstmCtrl.Caption = �����������
CstmCtrl.OnAction = �Module1.Invoice�
����� Add ��������� ��������� � ���� � ���������� �������. ��� ����� ��� ������ ������� �������� ��������� Id, ������ ��������� �������������� ������ ������� � Office. ��������� � Office 2000 ���������� ������ ������� �� 4000, � ����. 22 �������� �������� ������� ��������������.
������� 22
�������� ������� ��������������� ���������� ������ ����
������ ���������� ������� �������� ������������ Spelling � ���� �������� �� ������ �������� ����:
Set mySpell = CommandBars(��������� �����).��ntrols(���������)_.Controls.Add(Id:=2)
������ 61. ������� ��������, � ������� ����� ��������� ��� ���������� ���� � ������� ����������� ������������� ����. �� ������� ������ ���� ����� �������� �� ������ ������. ��� ����� �������� ��� �������, ������ �� ������� �������� �� ����� �������. ��� ���������� ������ ������� ������� ������� �����, ���������� ��� ������: ������� � ������ (���. 127). ������ ������ ��������� ��� ������ ��������� ��������� � ������� ����������� ���� (���. 127), ������ ������ ���������� ��� ������ �� ����� (���. 128).
���������� ����������
1.�������������� ���������� Word � �������� ��������.
2.���������� � �������� VBA � �������� �����.
3.��������� ��������� �������� ����������� ������.
Option Explicit
Public Sub CreateCustomMenu()
Dim CstmBar As CommandBar
Dim CstmPopUpi As CommandBarPopup, CstmPopUp2 As CommandBarPopup
Dim CstmCtrl As CommandBarControl
Dim Exist As Boolean
‘��������� ��� ������
For Each CstmBar In CommandBars
CstmBar.Enabled = False
Next CstmBar
‘�������, �������� � ������ ������� ����������� ������
Exist = False
For Each CstmBar In CommandBars
If CstmBar.Name = ��������� ����� Then
Exist = True
Exit For
End If
Next CstmBar
If Not Exist Then
Set CstmBar = CommandBars.Add(Name:=»������oe ����», Position:=msoBarTop, MenuBar:=True, Temporary:=False)
End If
CstmBar.Enabled = True
CstmBar.Visible = True
‘��������� ���� �� ������
Exist = False
For Each CstmCtrl In CstmBar.Controls
If CstmCtrl.Caption = �&���� ���������� Then
Exist = True
Exit For
End If
Next CstmCtrl
If Not Exist Then
Set CstmCtrl = CstmBar.Controls.Add(Type:=msoControlPopup, Before:=1)
CstmCtrl.Caption = �&���� ����������
‘��������� ��� ������� �������
Set CstmPopUpi =
CstmCtrl.Controls.Add(Type:=msoControlPopup)
CstmPopUpi.Caption = � � �������� �������
Set CstmPopUp2 =
CstmCtrl.Controls.Add(Type:=msoControlPopup)
CstmPopUp2.Caption = � �����������
‘��������� ������� � ������ �������
Set CstmCtrl =
CstmPopUpi.Controls.Add(Type:=msoControlButton)
CstmCtrl.Caption = �����������
CstmCtrl.OnAction = �Module1.Invoice�
Set CstmCtrl =
CstmPopUp2.Controls.Add(Type:=msoControlButton)
CstmCtrl.Caption = �����
CstmCtrl.OnAction = �Module1.Account�
End If
End Sub
��������� � ���������. �������, ��������� �������� Enabled, ���� ��������� ��� ������. ����� ���� ������������ �������� ���� � ����� ������� � ���������, ���������� ����� ���� �����. �������� ��������: ����� ����������� ������ ������ ������ �����������, � �� ��� �� �� ��� ��������. �������� �������� ��������� �������� ������, ����������� ��� �������� �������� ��� ������������ ����� ��� ������� ��������������.
4.��������� ��������� �������������� ������� ������������ ���������.
Public Sub ResetMainMenu()
Dim CstmBar As CommandBar
‘�������� ��� ������
For Each CstmBar In CommandBars
CstmBar.Enabled = True
Next CstmBar
Set CstmBar = CommandBars.Item(�Menu Bar�)
CstmBar.Visible = True
End Sub
5.���������� ���������� ������ ���������.
Private Sub CommandButton1_Click()
Call CreateCustomMenu
End Sub
6.���������� ���������� ������ �������, ����������������� ����������� ���������.
Private Sub CommandButton2_Click()
Call ResetMainMenu
End Sub
7.������ ������ ��� �����������, �������� ���������, ���������� � ����� �� ����� ������ ���� ��������� � ����:
Public Sub Invoice()
MsgBox (����������!�)
End Sub
Public Sub Account()
MsgBox (�����!�)
End Sub
8.��������������� ���������, ��������� ����� �� ����������.
���. 127. ����� ������� 61 � ������� ������. ��������� ������ ������ �������
����������. ������ ������ ���������� ��� ����� ������������� ������������� ��������� �������: � �������� ���� ������������ ������� ����� �����, ������� �������� ��������������� �����, ������������� ���� ����� ���������� (���. 129, 130). ����� ������� ������ ������� ���� ����� ���������� Word ����������, ��������� ������� ����, ��������� ����������. � ���� ���� ����� ������� � ���� + ������ ��������� ����� � ���������������� �������� (������� � ��������).
���. 128. ��������� ������ ������ ��������
���. 129. ������� ���� ������������ � ���������� �����
���. 130. ������� ���� ����������, ��������� ����������, � ����� ������, ���������� ����� � ������� ��������
ali_vlad 5 / 5 / 2 Регистрация: 21.07.2013 Сообщений: 362 |
||||
1 |
||||
Создание своего меню24.11.2013, 10:24. Показов 7382. Ответов 16 Метки нет (Все метки)
Создал свое меню, как назначить макрос кнопке
List2Borders() — макрос
0 |
ikki призрак 3261 / 889 / 119 Регистрация: 11.05.2012 Сообщений: 1,702 Записей в блоге: 2 |
||||
24.11.2013, 11:42 |
2 |
|||
1 |
ali_vlad 5 / 5 / 2 Регистрация: 21.07.2013 Сообщений: 362 |
||||
24.11.2013, 12:13 [ТС] |
3 |
|||
А как сделать, чтобы CBar1 появлялся при активации определенного листа, а при активации других скрывался
Выдает скрывает кнопки
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
||||
24.11.2013, 12:48 |
4 |
|||
а при активации других скрывался проверяй имя активируемого листа
0 |
ali_vlad 5 / 5 / 2 Регистрация: 21.07.2013 Сообщений: 362 |
||||||||||||
24.11.2013, 14:57 [ТС] |
5 |
|||||||||||
проверяй имя активируемого листа
Этот код не работает ни в модуле ни на листе Код на 1 листе (где надо скрыть меню)
Код на 2 листе (где надо отобразить меню)
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
24.11.2013, 15:20 |
6 |
Проверено независимым экспертом — код Workbook_SheetActivate() работает!
0 |
5 / 5 / 2 Регистрация: 21.07.2013 Сообщений: 362 |
|
24.11.2013, 15:37 [ТС] |
7 |
Проверено независимым экспертом — код Workbook_SheetActivate() работает! Это лирическое отступление! Вернемся к нашему CBar1
0 |
5 / 5 / 2 Регистрация: 21.07.2013 Сообщений: 362 |
|
24.11.2013, 15:46 [ТС] |
8 |
Книга1.xls
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
24.11.2013, 16:44 |
9 |
Это не было лирическим отступлением. Это было самое что ни на есть практическое!
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
|
24.11.2013, 16:53 |
10 |
Независимый эксперт подтвердил же: работает!
0 |
5 / 5 / 2 Регистрация: 21.07.2013 Сообщений: 362 |
|
24.11.2013, 20:28 [ТС] |
11 |
Sh.Index Добавлено через 12 минут
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||||||
24.11.2013, 20:41 |
12 |
|||||||
Нет там недостатков, просто нужно всё делать тщательно продумав весь процесс, а не только одну его часть.
И в модуле:
К своему файлу прикручивайте сами — он есть только у Вас.
0 |
5 / 5 / 2 Регистрация: 21.07.2013 Сообщений: 362 |
|
24.11.2013, 20:48 [ТС] |
13 |
Книга1.xls
0 |
ali_vlad 5 / 5 / 2 Регистрация: 21.07.2013 Сообщений: 362 |
||||
25.11.2013, 23:35 [ТС] |
14 |
|||
Есть меню: Кликните здесь для просмотра всего текста
Как сделать его вертикальным, чтобы сначала была 1 кнопка, под ней располагались 2 и 3, под ними 4 и 5 (в проекте)
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
||||
26.11.2013, 10:11 |
15 |
|||
В общем случае: добавлять кнопки на панель.
1 |
5 / 5 / 2 Регистрация: 21.07.2013 Сообщений: 362 |
|
26.11.2013, 11:14 [ТС] |
16 |
Вам конечно спасибо, но вы предлагаете выплывающее меню, а у меня статичное. В связи с этим вопрос: как вызывать меню в заранее определенном диапазоне range()
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
|
26.11.2013, 23:27 |
17 |
вы предлагаете выплывающее меню Это отнюдь не «всплывающее меню», а самое обыкновенное.
0 |