Элемент управления пользовательской формы Frame, применяемый в VBA Excel для создания группы элементов управления. Свойства рамки, пример использования.
UserForm.Frame – это элемент управления пользовательской формы, предназначенный для создания отдельных групп элементов управления, объединенных между собой визуально и функционально.
Элемент управления Frame в VBA Excel состоит из надписи и видимых или скрытых границ, определяющих его размер.
Визуально элементы управления на пользовательской форме можно разделить на группы с помощью отступов. Но рамка, если она не скрыта (Visible=True, BorderStyle=1), позволяет выделить каждую группу с помощью видимых границ.
Классический пример функционального объединения элементов управления – это группы переключателей (OptionButton). Наборы переключателей в каждой отдельной рамке (Frame) ведут себя как независимые от других переключателей функциональные группы. В каждой такой группе один переключатель всегда может быть включен (Value=True).
Элемент управления Frame может быть скрыт полностью (Visible=False) или частично (Visible=True, BorderStyle=0), когда скрыты только границы, а надпись остается видимой.
Свойства элемента Frame
Свойство | Описание |
---|---|
BorderStyle | Отображение границ элемента управления. 0 (fmBorderStyleNone) – границы скрыты, 1 (fmBorderStyleSingle) – границы отображены. |
Caption | Текст надписи элемента управления Frame. |
ControlTipText | Текст всплывающей подсказки при наведении курсора на рамку. |
Enabled | Возможность взаимодействия пользователя с элементом управления. True – взаимодействие включено, False – отключено (цвет Frame становится серым). |
Font | Шрифт, начертание и размер текста надписи. |
Height | Высота элемента управления. |
Left | Расстояние от левого края внутренней границы пользовательской формы до левого края элемента управления. |
Picture | Добавление изображения в поле рамки. |
PictureAlignment | Выравнивание изображения в поле элемента Frame. |
PictureSizeMode | Управление размером изображения в рамке. |
TabIndex | Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой нажатием клавиш «Tab», «Enter». Отсчет начинается с 0. |
Top | Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края элемента управления. |
Visible | Видимость элемента Frame. True – элемент отображается на пользовательской форме, False – скрыт. |
Width | Ширина элемента управления. |
В таблице перечислены только основные, часто используемые свойства переключателя. Все доступные свойства отображены в окне Properties элемента управления Frame.
Примеры кода VBA с рамкой
Пример 1
Присвоение значений свойств элементу управления Frame в коде VBA Excel:
Private Sub UserForm_Initialize() Me.Caption = «Пример 1» With Frame1 .Caption = «Рамка 1» .BackColor = vbWhite .BorderStyle = 1 .BorderColor = vbBlue .Font.Size = 12 .Font.Italic = True End With End Sub |
Пример 2
Поведение двух групп переключателей в рамках на пользовательской форме:
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 |
‘Присвоение исходных значений ‘свойствам элементов управления ‘перед отображением формы Private Sub UserForm_Initialize() Me.Caption = «Пример 2» With OptionButton1 .Value = False .Caption = «Белый» End With With OptionButton2 .Caption = «Зеленый» .Value = False End With With OptionButton3 .Value = False .Caption = «Желтый» End With With OptionButton4 .Caption = «Синий» .Value = False End With With Frame1 .BorderStyle = 1 .Caption = «Рамка 1» End With With Frame2 .BorderStyle = 1 .Caption = «Рамка 2» End With End Sub ‘Смена цвета рамки при ‘клике на OptionButton1 Private Sub OptionButton1_Click() With Frame1 .BackColor = vbWhite .Caption = «Рамка 1 белая» End With End Sub ‘Смена цвета рамки при ‘клике на OptionButton2 Private Sub OptionButton2_Click() With Frame1 .BackColor = vbGreen .Caption = «Рамка 1 зеленая» End With End Sub ‘Смена цвета рамки при ‘клике на OptionButton3 Private Sub OptionButton3_Click() With Frame2 .BackColor = vbYellow .Caption = «Рамка 2 желтая» End With End Sub ‘Смена цвета рамки при ‘клике на OptionButton4 Private Sub OptionButton4_Click() With Frame2 .BackColor = vbBlue .Caption = «Рамка 2 синяя» End With End Sub |
На чтение 5 мин Просмотров 152 Опубликовано 29.08.2013
В данной статье мы подведем небольшой итог по элементам управления языка VBA, а именно, рассмотрим компонент VBA Frame, который позволяет добавлять на поверхность формы рамку. Сам объект довольно простой, хотя у него и есть масса свойств и событий, в большинстве случаев они обрабатываться не будут.
Добавление объектов класса Frame полезно в том случае, если нужно создать группу заданных объектов (например, флажков или переключателей) или просто, сделать визуальное оформление. Помним, что для запуска редактора VBA служит комбинация клавиш Alt + F11, все элементы управления находятся в окне ToolBox, оно автоматически доступно при роботе с объектом UserForm. Если окно ToolBox отсутствует, то его можно вызвать из меню View.
Единственные свойство класса Frame, которое мы будем использовать:
BorderStyle – отвечает за отображение рамки, 0 – рамка не будет отображаться (будет видна простая вмятина), 1 – будет отображаться рамка цвета, заданного в свойстве BorderColor.
Caption – задает надпись, которая отображается вверху по контуру рамки, свойство носит чисто информативный характер.
Хорошо, давайте приступим к настройке самой формы с компонентами. На поверхности UserForm мы разместим два блока, один – набор переключателей OptionButton, а второй – набор флажков CheckBox. Рядом будет находиться текстовое поле TextBox и список ListBox и одна кнопка. Когда мы будет выбирать значения в блоке с переключателями, в текстовом поле будет отображаться информация о выбранном элементе. При нажатии на кнопку, будет происходить добавление в список тех значений, которые отмечены галочками во втором блоке.
В редакторе кода для формы нужно разместить следующий код:
Private Sub OptionButton1_Change() Dim Data As String Data = "Злобная поисковая система, которая любить портить настроение молодым блогерам. " & _ "Знаменита своим фильтром АГС. В критические дни ведет себя как девушка." TextBox1.Text = Data End Sub Private Sub OptionButton2_Change() Dim Data As String Data = "Данную поисковую систему обожают любители халявы и молодые блогеры. " & _ "Гугл всегда рад проиндексировать любой ГС и дать мнимую надежу заработать в интернете." TextBox1.Text = Data End Sub Private Sub OptionButton3_Change() Dim Data As String Data = "В свое время Рамблер учитывался как поисковая система. " & _ "Теперь это никому не нужный ресурс." TextBox1.Text = Data End Sub Private Sub UserForm_Initialize() TextBox1.MultiLine = True Frame3.BorderStyle = fmBorderStyleSingle End Sub Private Sub CommandButton1_Click() Dim ctrl As Control For Each ctrl In Frame2.Controls If ctrl.Value = True Then ListBox1.AddItem ctrl.Caption End If Next End Sub
Давайте проанализируем все по порядку.
Процедуры от OptionButton1_Change до OptionButton4_Change отвечают за обработку события Change для каждого объекта OptionButton, расположенного на поверхности Frame. Переменная Data содержит данные типа String, в ней хранится информация, которую нужно вывести в текстовом поле.
CommandButton1_Click – тут происходит обработка клика по кнопке, в цикле происходит перебор коллекции всех элементов, что лежат на второй рамке класса Frame vba языка. Если значение Value какого из элементов ровно true (поставлена галочка), то содержимое Caption для выбранного объекта будет добавляться в список ListBox.
UserForm_Initialize – тут происходит настройки базовых свойств: определяем для текстового поля то, что оно будет многострочным (свойству MultiLine присваиваем значение true). Для объекта Frame3 класса vba Frame мы определяем, что бы отображалась рамка (свойству BorderStyle присваиваем значение fmBorderStyleSingle).
И так, в этой статье мы рассмотрели элемент управления Frame VBA языка, который позволяет добавлять рамку на поверхность формы.
Элемент управления Frame
июля 20, 2015 admin
Frame — это просто рамка, которая выделяет прямоугольную область на форме и позволяет организовать элементы управления
рис . 1.1 Элемент управления Frame на панели ToolBox
рис. 1.2 Элемент управления Frame на форме
Помещенные внутрь рамки переключатели считаются взаимоисключающими, остальные элементы управления ведут себя точно так же, хотя иногда бывает полезно с точки зрения наглядности свести вместе под одной рамкой, к примеру, набор флажков. При желании рамку можно сделать невидимой, установив для свойства BorderStyle значение 1 и убрав значение свойства Caption.
рис. 1.3 Пример элемента управления Frame на форме
Добавление объектов класса Frame полезно в том случае, если нужно создать группу заданных объектов (например, флажков или переключателей) или просто, сделать визуальное оформление. Единственные свойство класса Frame, которое мы будем использовать:
BorderStyle – отвечает за отображение рамки, 0 – рамка не будет отображаться (будет видна простая вмятина), 1 – будет отображаться рамка цвета, заданного в свойстве BorderColor.
Свойство Caprion носит чисто информативный характер.
Рассмотрим пример: На поверхности UserForm мы разместим два блока, один – набор переключателей OptionButton, а второй – набор флажков CheckBox. Рядом будет находиться текстовое поле TextBox и список ListBox и одна кнопка. Когда мы будет выбирать значения в блоке с переключателями, в текстовом поле будет отображаться информация о выбранном элементе. При нажатии на кнопку, будет происходить добавление в список тех значений, которые отмечены галочками во втором блоке.
В редакторе кода для формы нужно разместить следующий код:
Private Sub OptionButton1_Change()
Dim Data As String
Data = “ ИТ-компания, владеющая одноимённой системой поиска в Сети и интернет-порталом. Поисковая система «Яндекс» является четвёртой среди поисковых систем мира по количеству обработанных поисковых запросов”
TextBox1.Text = Data
End Sub
Private Sub OptionButton2_Change()
Dim Data As String
Data = “Крупнейшая поисковая система интернета, принадлежащая корпорации Google Inc”
TextBox1.Text = Data
End Sub
Private Sub OptionButton3_Change()
Dim Data As String
Data = “Новости России и мира. Электронная почта. Поиск информации в интернете. Развлекательные и коммуникационные сервисы. Программы и приложения.”
TextBox1.Text = Data
End Sub
Private Sub UserForm_Initialize()
TextBox1.MultiLine = True
Frame2.BorderStyle = fmBorderStyleSingle
End Sub
Private Sub CommandButton1_Click()
Dim ctrl As Control
For Each ctrl In Frame2.Controls
If ctrl.Value = True Then
ListBox1.AddItem ctrl.Caption
End If
Next
End Sub
Процедуры от OptionButton1_Change до OptionButton4_Change отвечают за обработку события Change для каждого объекта OptionButton, расположенного на поверхности Frame. Переменная Data содержит данные типа String, в ней хранится информация, которую нужно вывести в текстовом поле.
CommandButton1_Click – тут происходит обработка клика по кнопке, в цикле происходит перебор коллекции всех элементов, что лежат на второй рамке класса Frame vba языка. Если значение Value какого из элементов ровно true (поставлена галочка), то содержимое Caption для выбранного объекта будет добавляться в список ListBox.
UserForm_Initialize – тут происходит настройки базовых свойств: определяем для текстового поля то, что оно будет многострочным (свойству MultiLine присваиваем значение true). Для объекта Frame2 класса vba Frame мы определяем, что бы отображалась рамка (свойству BorderStyle присваиваем значение fmBorderStyleSingle).
Пример можно скачать здесь
UserForm Controls — Frame, MultiPage and TabStrip
UserForm acts as a container in which you add multiple ActiveX controls, each of which has a specific use and associated properties. By itself, a UserForm will not be of much use unless ActiveX controls are added to it which are the actual user-interactive objects. Using ActiveX Controls on a Worksheet have been illustrated in detail, in the separate section of «Excel VBA: ActiveX Controls, Form Controls & AutoShapes on a Worksheet».
Also refer «2. UserForm and Controls — Properties» for properties common to the UserForm and most Controls
Note: In below given examples, vba codes are required to be entered in the Code Module of the UserForm, unless specified otherwise.
—————————————-
Contents:
Frame Control
MultiPage Control
TabStrip Control
—————————————-
Frame Control
Frames are used to group controls that work together, are related to each other or have some commonality, in a UserForm. They also enhance the UserForm’s layout by bunching and organizing a related set of items. For example, in a BioData Form, the physical attributes like height, complexion, weight and hair color can be grouped in a particular Frame. Frames are particularly useful to group two or more OptionButtons. Primarily, Frames are used for 2 purposes: (i) to group related Controls in a UserForm to visually enhance and organize the Form’s layout; and (ii) to group OptionButtons to set their behaviour — they become mutually exclusive within a Frame and selecting one OptionButton will de-select all other OptionButtons within that Frame only. Using a Frame: First add the Frame in a UserForm and then add Controls to the Frame.
Example 1: Determine name and caption of all enabled OptionButtons in a Frame
Private Sub CommandButton1_Click()
‘determine name and caption of all enabled OptionButtons in a Frame
Dim ctrl As Control
For Each ctrl In Frame1.Controls
If TypeOf ctrl Is MSForms.OptionButton Then
If ctrl.Enabled = True Then
MsgBox ctrl.Name & » is an enabled OptionButton with caption » & ctrl.Caption
End If
End If
Next
End Sub
Example 2: Using Controls in a Frame with vba code (refer Image 25):
Private Sub UserForm_Initialize()
‘Set properties of Controls on initialization of UserForm.
Dim i As Integer
Dim myArray As Variant
‘enter value in «Name» TextBox of UserForm:
Me.txtName.Value = «Enter Your Name»
‘set Caption for the 2 Frames:
Me.fraPhyAttr.Caption = «Physical Attributes»
Me.fraEduExp.Caption = «Education & Experience»
‘populate ListBox of «Age» in the UserForm:
With Me.lstAge
For i = 1 To 100
.AddItem i & » yrs»
Next i
End With
‘populate ListBox of «Height» in the Frame «Physical Attributes»:
With Me.fraPhyAttr.ListBox1
For i = 140 To 200
.AddItem i & » cms»
Next i
End With
‘populate ListBox of «Weight» in the Frame «Physical Attributes»:
With Me.fraPhyAttr.ListBox2
For i = 80 To 250
.AddItem i & » lbs»
Next i
End With
‘populate ListBox «Field of Work» in the frame «Education & Experience»:
myArray = Array(«Finance», «Banking», «Medical», «Engineering», «Marketing», «Management», «Airlines», «Others»)
Me.fraEduExp.lstWorkField.List = myArray
‘populate ListBox of «Exp in Years» in the Frame «Education & Experience»:
With Me.fraEduExp.lstExpYrs
For i = 1 To 50
.AddItem i & » yrs»
Next i
End With
‘Group OptionButtons:
With Me.fraPhyAttr
optDark.GroupName = «Complexion»
optWheatish.GroupName = «Complexion»
optFair.GroupName = «Complexion»
optBlack.GroupName = «Hair»
optBlonde.GroupName = «Hair»
optBrunette.GroupName = «Hair»
optOther.GroupName = «Hair»
End With
Me.fraEduExp.optGraduate.GroupName = «EduLevel»
Me.fraEduExp.optPostGrad.GroupName = «EduLevel»
Me.fraEduExp.optProfessional.GroupName = «EduLevel»
‘enter value in «University/Institution» TextBox of the Frame «Education & Experience»:
Me.fraEduExp.txtUniversityInstitution.Value = «Enter Name»
End Sub
Private Sub txtName_Enter()
‘on selection, clears «Name» TextBox of UserForm
Me.txtName.Value = «»
End Sub
Private Sub txtUniversityInstitution_Enter()
‘on selection, clears «University/Institution» TextBox of the Frame «Education & Experience»
Me.fraEduExp.txtUniversityInstitution.Value = «»
End Sub
—————————————————————————————————————
MultiPage Control
A MultiPage control comprises of one or more Page objects, each containing its own set of controls. MultiPage is best used when you wish to handle a large amount of data that can be classified into multiple categories, wherein a separate Page can be created for each category. All controls that are added to a Page in a MultiPage control, are contained in and become a part of that Page which distinguishes the controls from those which are otherwise a part of the UserForm. A MultiPage control has several Pages, wherein selecting a Page makes it the current one (making it visible) while hiding the others. Each Page of a MultiPage control has its own tab order. The Pages are numbered from 0, and to select the first Page in a MultiPage control, use the code: MultiPage1.Value = 0. By default, a MultiPage control has 2 Pages. To Add Pages, right-click on the tab and select New Page ((select Delete Page to delete a Page). Note: Each Page of a MultiPage control will separately group two or more OptionButtons, irrespective of whether all OptionButtons (across all pages) have the same GroupName.
Dynamically Add/Remove a Page:
Using the Add Method: Syntax: Set m = MultiPage1.Pages.Add(pageName, pageCaption, pageIndex). pageIndex (optional) is an integer which specifies the position for the Page to be inserted, starting from 0 for the first position/Page. pageName sets the Name for the Page, pageCaption sets the Caption. Both are optional to specify.
Set m = MultiPage1.Pages.Add(«Page5», «NewPage», 1) — this code adds a new Page with name Page5 and Caption NewPage, as the second Page (viz. second position in the page order).
MultiPage1.Pages.Add «Page3»; MultiPage1.Pages(2).Caption = «NewPage» — these 2 codes add a new (third) Page with name Page3 and set its Caption to NewPage.
MultiPage1.Pages.Add — this code simply adds a new Page.
To Remove a Page — Syntax: MultiPage1.Pages.Remove (pageIndex). Example: MultiPage1.Pages.Remove (1) — this code removes the second Page.
Dynamically Access an individual Page:
To change or set the properties of a Page at Run-time, we need to identify that Page in the MultiPage control, which can be done in different ways. To access an individual Page in a MultiPage control, the following methods can be used (refer Images 26a & 26b and below Example of vba codes):
1. Numeric Index (using the Pages collection): Index 0 refers to the first page, Index 1 to the second page, and so on. Code to set Caption — MultiPage1.Pages(Index).Caption
2. Item Method (using the Pages collection): Item Index 0 refers to the first page, Item Index 1 to the second page , and so on. Code to set Caption — MultiPage1.Pages.Item(ItemIndex).Caption
3. Page Name: Code to set Caption — MultiPage1.Pages(«PageName»).Caption or MultiPage1.Pages.Item(«PageName»).Caption
4. Page Object: Code to set Caption — MultiPage1.PageName.Caption
5. SelectedItem Property: Code to set Caption — MultiPage1.SelectedItem.Caption
Example 3: Change properties of each Page of a MultiPage control, by using different methods of Page Selection. Refer Image 26a before the code is run (ie. MultiPage is per Design-time) and refer Image 26b which shows the changed Captions (Run-time) after running the below vba code.
Private Sub UserForm_Activate()
‘change/set properties of each Page of a MultiPage control, by using different methods of Page Selection.
‘using Numeric Index: sets Caption for the first Page:
MultiPage1.Pages(0).Caption = «Australia»
‘using Item Method: sets Caption for the second Page:
MultiPage1.Pages.Item(1).Caption = «Canada»
‘using Page Name: sets Caption for the third Page, whose name is Page3:
MultiPage1.Pages(«Page3»).Caption = «France»
‘alternate code: MultiPage1.Pages.Item(«Page3»).Caption = «France»
‘using Page Object: sets Caption for the fourth Page, whose name is Page4:
MultiPage1.Page4.Caption = «Germany»
‘using SelectedItem Property: sets Caption for the fifth Page, which is the selected/active page:
‘selects the fifth Page
MultiPage1.Value = 4
‘sets Caption for the selected page
MultiPage1.SelectedItem.Caption = «USA»
End Sub
Create a wizard using a Single UserForm and MultiPage control
In case you wish to accept data sequentially (ie. one step after another), then instead of using multiple UserForms it is better to use a MultiPage control to create multiple Pages in a Single UserForm. The next Page can be made accessible only after the previous Page has been filled and entered. We show how to create a wizard interface comprising of 4 Pages, as below.
Example 4: Refer Images 27a to 27d which show the 4 Pages in the MultiPage wizard. Below is the set of vba codes for these (to be entered in the Code Module of the UserForm):
Private Sub UserForm_Initialize()
‘set properties of each Page of the MultiPage control
Dim i As Integer
‘set Caption for each Page:
MultiPage1.Pages(0).Caption = «Name»
MultiPage1.Pages(1).Caption = «Gender & Age»
MultiPage1.Pages(2).Caption = «Personal»
MultiPage1.Pages(3).Caption = «Professional»
‘set Caption for Frames in fourth Page:
MultiPage1.Pages(3).Frame1.Caption = «Field of Work»
MultiPage1.Pages(3).Frame2.Caption = «Education Level»
‘populate ListBox «Age» in second Page:
With MultiPage1.Pages(1).lstAge
For i = 1 To 100
.AddItem i & » yrs»
Next i
End With
‘populate ComboBox «Residing Country» in third Page:
myArray = Array(«Argentina», «Australia», «Brazil», «China», «France», «Germany», «Greece», «HongKong», «India», «Italy», «Japan», «Russia», «Singapore», «Spain», «Switzerland», «UK», «USA»)
MultiPage1.Pages(2).cmbCountry.List = myArray
MultiPage1.Pages(0).Enabled = True
MultiPage1.Pages(1).Enabled = False
MultiPage1.Pages(2).Enabled = False
MultiPage1.Pages(3).Enabled = False
‘select first page:
MultiPage1.Value = 0
End Sub
Private Sub MultiPage1_Change()
‘set properties of Previous, Next, Cancel & Save Buttons. Note: these buttons are created outside the MultiPage control.
Select Case MultiPage1.Value
‘First Page:
Case 0
cmdPrevious.Enabled = False
cmdNext.Enabled = True
cmdSave.Enabled = False
‘Last Page:
Case MultiPage1.Pages.Count — 1
cmdPrevious.Enabled = True
cmdNext.Enabled = False
cmdSave.Enabled = True
‘Other Pages:
Case Else
cmdPrevious.Enabled = True
cmdNext.Enabled = True
cmdSave.Enabled = False
End Select
End Sub
Private Sub cmdSave_Click()
‘set properties for CommandButton Save. Note: this code does not provide how/where MultiPage data will be saved, but only the conditions under which data will get stored.
‘Last Page — atleast one OptionButton should be selected in each Frame:
With MultiPage1.Pages(MultiPage1.Pages.Count — 1)
If optAdmin.Value = False And optMktg.Value = False And optOps.Value = False And optOther1.Value = False Then
MsgBox «Please select Field of Work»
Exit Sub
ElseIf optGrad.Value = False And optPostGrad.Value = False And optProff.Value = False And optOther2.Value = False Then
MsgBox «Please select Education Level»
Exit Sub
End If
End With
End Sub
Private Sub cmdPrevious_Click()
‘set properties for CommandButton Previous
Select Case MultiPage1.Value
Case 1
MultiPage1.Pages(1).Enabled = False
MultiPage1.Pages(0).Enabled = True
MultiPage1.Value = 0
Case 2
MultiPage1.Pages(2).Enabled = False
MultiPage1.Pages(1).Enabled = True
MultiPage1.Value = 1
Case 3
MultiPage1.Pages(3).Enabled = False
MultiPage1.Pages(2).Enabled = True
MultiPage1.Value = 2
End Select
End Sub
Private Sub cmdNext_Click()
‘set properties for CommandButton Next
Select Case MultiPage1.Value
‘Name is required to be entered to proceed to next Page:
Case 0
If txtName.Value = «» Then
MsgBox «Please Enter Name»
Exit Sub
Else
MultiPage1.Pages(0).Enabled = False
MultiPage1.Pages(1).Enabled = True
MultiPage1.Value = 1
End If
‘Gender & Age are required to be selected to proceed to next Page:
Case 1
If optMale.Value = False And optFemale.Value = False Then
MsgBox «Please Select Gender»
Exit Sub
ElseIf lstAge.ListIndex = -1 Then
MsgBox «Please Select Age»
Else
MultiPage1.Pages(1).Enabled = False
MultiPage1.Pages(2).Enabled = True
MultiPage1.Value = 2
End If
‘Marital Status & Residing Country are required to be selected to proceed to next Page:
Case 2
If optMarried.Value = False And optSingle.Value = False Then
MsgBox «Please Select Marital Status»
Exit Sub
ElseIf cmbCountry.Value = «» Then
MsgBox «Please Select or Enter Country»
Else
MultiPage1.Pages(2).Enabled = False
MultiPage1.Pages(3).Enabled = True
MultiPage1.Value = 3
End If
End Select
End Sub
Private Sub cmdClose_Click()
‘set properties for CommandButton Close
Unload Me
End Sub
—————————————————————————————————————
TabStrip Control
A TabStrip control is used to view different contents in each Tab, for the same set of controls. A TabStrip is a collection of Tabs wherein each Tab contains a set of controls. By default, a TabStrip control has 2 Tabs. To Add Tabs, right-click on the Tab and select New Page (select Delete Page to delete a Tab).
Dynamically Add/Remove a Tab:
Using the Add Method: Syntax: Set t = TabStrip1.Tabs.Add(tabName, tabCaption, tabIndex). tabIndex (optional) is an integer which specifies the position for the Tab to be inserted, starting from 0 for the first position/Tab. tabName sets the Name for the Tab, tabCaption sets the Caption. Both are optional to specify.
Set t = TabStrip1.Tabs.Add(«Tab4», «NewTab», 1) — this code adds a new Tab with name Tab4 and Caption NewTab, as the second Tab (viz. second position in the tab order).
TabStrip1.Tabs.Add «Tab3»; TabStrip1.Tabs(2).Caption = «Div 3» — the 2 codes add a new (third) Tab named Tab3 and set its Caption to Div 3.
To Remove a Tab — Syntax: TabStrip1.Tabs.Remove (tabCaption). Example: TabStrip1.Tabs.Remove («Div 3») — this code removes Tab with Caption Div 3.
Difference between a MultiPage control and TabStrip control:
A MultiPage control is a container for controls, similar to a Frame. Each Page has a separate set of controls and selecting a Page (ie. making it visible) hides the other Pages of the MultiPage.
A TabStrip contains a consistent set of controls across all Tabs (within the TabStrip). The content of the controls changes when a different Tab is selected but the visibility or layout of the controls remain same.
Selecting a Tab:
To change or set the properties of a Tab at Run-time, we need to identify that Tab in the TabStrip control, which can be done in different ways. SelectedItem property of the TabStrip control indicates which Tab is selected. To select a Tab, set the Value property of the TabStrip control. Tab values start from 0, and the value of first Tab in a TabStrip control will be 0, value of second Tab will be 1, and so on. To access an individual Tab in a TabStrip control, the following methods can be used (refer below Example of vba codes):
1. Numeric Index (using the Tabs collection): Index 0 refers to the first page, Index 1 to the second page , and so on. Code to set Caption — TabStrip1.Tabs(Index).Caption
2. Item Method (using the Tabs collection): Item Index 0 refers to the first page, Item Index 1 to the second page , and so on. Code to set Caption — TabStrip1.Tabs.Item(ItemIndex).Caption
3. Tab Name: Code to set Caption — TabStrip1.Tabs(«TabName»).Caption or TabStrip1.Tabs.Item(«TabName»).Caption
4. Tab Object: Code to set Caption — TabStrip1.TabName.Caption
5. SelectedItem Property: Code to set Caption — TabStrip1.SelectedItem.Caption
Example 5: Change/set properties of each Tab of a TabStrip control, by using different methods of Tab Selection.
Private Sub UserForm_Initialize()
‘change/set properties of each Tab of a TabStrip control, by using different methods of Tab Selection.
‘using Numeric Index: sets Caption for the first Tab:
TabStrip1.Tabs(0).Caption = «Australia»
‘using Item Method: sets Caption for the second Tab:
TabStrip1.Tabs.Item(1).Caption = «Canada»
‘using Tab Name: sets Caption for the third Tab, whose name is Tab3:
TabStrip1.Tabs(«Tab3»).Caption = «France»
‘alternate code: TabStrip1.Tabs.Item(«Tab3»).Caption = «France»
‘using Tab Object: sets Caption for the fourth Tab, whose name is Tab4:
TabStrip1.Tab4.Caption = «Germany»
‘using SelectedItem Property: sets Caption for the fifth Tab, which is the selected/active Tab:
‘selects the fifth Tab
TabStrip1.Value = 4
‘sets Caption for the selected Tab
TabStrip1.SelectedItem.Caption = «USA»
End Sub
Private Sub CommandButton1_Click()
‘check Name and Caption of all Tabs in a TabStrip control.
Dim i As Integer
For i = 0 To TabStrip1.Tabs.Count — 1
MsgBox TabStrip1.Tabs(i).Name & » has a caption of » & TabStrip1.Tabs(i).Caption
Next i
End Sub
Example 6: How to work with a TabStrip control and Tabs — using a TabStrip and its Tabs to Load data from worksheet and to update worksheet range from Tab data. Refer Images 28a to 28c, and below vba codes:
Private Sub UserForm_Initialize()
‘Set properties of Controls on initialization of UserForm.
‘set Captions for each Tab:
With TabStrip1
.Tabs(0).Caption = «Div 1»
.Tabs(1).Caption = «Div 2»
‘add new Tab named «Tab3» and set its Caption:
.Tabs.Add «Tab3»
.Tabs(2).Caption = «Div 3»
End With
‘populate TextBoxes «Sales Target», «Actual Sales» & «Achieved (%)» for Division 1 from worksheet:
txtSalesTarget.Value = Sheet5.Range(«B2»).Value
txtActualSales.Value = Sheet5.Range(«B3»).Value
txtAchieved.Value = Round(Sheet5.Range(«B4″).Value * 100, 2) & » %»
‘set first Tab as the selected Tab:
TabStrip1.Value = 0
‘set properties of Label (viz. Caption, BackColor, Font & TextAlign) which appears on selection of the first Tab:
lblDivision.Caption = «Div 1: Sales Performance»
Me.lblDivision.BackColor = RGB(255, 0, 0)
Me.lblDivision.Font.Bold = True
Me.lblDivision.TextAlign = fmTextAlignCenter
‘user not allowed to enter in TextBox of «Acheived (%)»
txtAchieved.Enabled = False
End Sub
Private Sub TabStrip1_Change()
‘when a new Tab is selected, Label properties are set and TextBoxes are populated from worksheet:
Dim n As Integer
n = TabStrip1.SelectedItem.Index
Select Case n
Case 0
‘on selection of first Tab, Caption of Label is set and its BackColor changes to Red:
lblDivision.Caption = «Div 1: Sales Performance»
Me.lblDivision.BackColor = RGB(255, 0, 0)
‘TextBoxes «Sales Target» & «Actual Sales» for Division 1 get populated from worksheet:
txtSalesTarget = Sheet5.Range(«B2»).Value
txtActualSales = Sheet5.Range(«B3»).Value
txtAchieved = Round(Sheet5.Range(«B4″).Value * 100, 2) & » %»
Case 1
‘on selection of second Tab, Caption of Label is set and its BackColor changes to Green:
lblDivision.Caption = «Div 2: Sales Performance»
Me.lblDivision.BackColor = RGB(0, 255, 0)
‘TextBoxes «Sales Target» & «Actual Sales» for Division 2 get populated from worksheet:
txtSalesTarget = Sheet5.Range(«C2»).Value
txtActualSales = Sheet5.Range(«C3»).Value
txtAchieved = Round(Sheet5.Range(«C4″).Value * 100, 2) & » %»
Case 2
‘on selection of third Tab, Caption of Label is set and its BackColor changes to Yellow:
lblDivision.Caption = «Div 3: Sales Performance»
Me.lblDivision.BackColor = RGB(255, 255, 0)
‘TextBoxes «Sales Target» & «Actual Sales» for Division 3 get populated from worksheet:
txtSalesTarget = Sheet5.Range(«D2»).Value
txtActualSales = Sheet5.Range(«D3»).Value
txtAchieved = Round(Sheet5.Range(«D4″).Value * 100, 2) & » %»
End Select
End Sub
Private Sub cmdClose_Click()
‘clicking on «Close» button, unloads the UserForm
Unload Me
End Sub
Private Sub cmdClick_Click()
‘Clicking the «Save» button will update worksheet with the values of each Tab.
‘Note that worksheet Range(«B4:D4») has a Percentage format of 2 decimals. Range(«B4») has formula: =B3/B2; Range(«C4») has formula: =C3/C2; and Range(«D4») has formula: =D3/D2.
Dim n As Integer
n = TabStrip1.SelectedItem.Index
Select Case n
‘update worksheet range per updated values in Text Boxes, for Division 1:
Case 0
If IsNumeric(txtSalesTarget.Value) And txtSalesTarget.Value > 0 And IsNumeric(txtActualSales.Value) Then
Sheet5.Range(«B2»).Value = txtSalesTarget.Value
Sheet5.Range(«B3»).Value = txtActualSales.Value
txtAchieved.Value = Round((txtActualSales.Value / txtSalesTarget.Value) * 100, 2) & » %»
Else
txtAchieved.Value = «»
End If
‘update worksheet range per updated values in Text Boxes, for Division 2:
Case 1
If IsNumeric(txtSalesTarget.Value) And txtSalesTarget.Value > 0 And IsNumeric(txtActualSales.Value) Then
Sheet5.Range(«C2»).Value = txtSalesTarget.Value
Sheet5.Range(«C3»).Value = txtActualSales.Value
txtAchieved.Value = Round((txtActualSales.Value / txtSalesTarget.Value) * 100, 2) & » %»
Else
txtAchieved.Value = «»
End If
‘update worksheet range per updated values in Text Boxes, for Division 3:
Case 2
If IsNumeric(txtSalesTarget.Value) And txtSalesTarget.Value > 0 And IsNumeric(txtActualSales.Value) Then
Sheet5.Range(«D2»).Value = txtSalesTarget.Value
Sheet5.Range(«D3»).Value = txtActualSales.Value
txtAchieved.Value = Round((txtActualSales.Value / txtSalesTarget.Value) * 100, 2) & » %»
Else
txtAchieved.Value = «»
End If
End Select
End Sub
Элемент
управления Frame служит для явно видимого
объединения в группу нескольких других
элементов управления. Кнопки-переключатели
(OptionButton), помещенные в рамку, автоматически
являются взаимоисключающими, т. е. при
выборе одной из них остальные сразу же
отключаются (получают значение False).
Поведение других элементов, помещенных
в рамку, не меняется.
Заголовок
на верхней границе рамки задается
свойством Caption. Как и для диалогового
окна, для рамки можно задать рисунок,
являющийся фоном (свойство Picture),
определить область прокрутки и вид
полосы прокрутки (свойства ScrollLeft,
ScrollTop, ScrollHeight, ScrollWidth, ScrollBars). Свойство
Zoom определяет коэффициент уменьшения
или увеличения изображений всех
элементов внутри рамки (измеряется в
процентах и принимает значения от 10%
до 400%).
События:
AddControl, BeforeDragOver, BeforeDropOrPaste, Click, DblClick,
Enter, Error, Exit, KeyDown, KeyUp, KeyPress, Layout, MouseDown,
MouseUp, MouseMove, RemoveControl, Scroll, Zoom.
Методы:
Copy, Cut, Move, Paste, RedoAction, Repaint, Scroll,
SetDefaultTabOrder, UndoAction, ZOrder.
§ 6 Создание пользовательских форм
Чтобы
создать форму, откройте редактор VBA
(Alt+F11), выберите в списке слева Microsoft
Excel Objects и в его меню выбираем
Insert->UserForm.
На
экране появилась пустая форма. В ее
контекстном меню выбираем Properties –
открывается окно свойств формы.
В
этом окне можно изменить заголовок
формы, цвет фона, шрифт и многие другие
параметры. Кроме окна свойств есть еще
инструментальная панель Toolbox. В ней
содержатся элементы управления, которые
можно разместить на форме. Для начала,
добавим например кнопку.
Теперь
в окне свойств доступны свойства кнопки.
Можно изменить надпись на ней, или
добавить картинку. Осталось только
привязать к этой кнопке свой код. Это
очень просто – по двойному щелчку на
кнопке вы попадете в окно редактора
VBA, где уже создана процедура обработки
нажатия на кнопку:
Private
Sub CommandButton1_Click()
End
Sub
Лабораторный практикум № 1. Заполнение ListBox.
Целью
лабораторной работы является приобретение
навыков практического использования
объекта
ListBox,
то есть заполнение и обработка данных.
Объект
ListBox применяется
для хранения списка значений. Из списка
значений пользователь может выбрать
одно или несколько значений, которые
в последующем будут использоваться в
тексте программы.
Заполняется
объект ListBox только программно!
При
этом используются следующие способы
заполнения:
-
Поэлементно,
если список состоит из одной колонки; -
Массивом,
если список состоит из одной колонки; -
Из
диапазона, в который предварительно
введены элементы списка; -
Поэлементно,
если список состоит из нескольких
колонок; -
Массивом,
если список состоит из нескольких
колонок.
Создаваемые
объекты
ListBox
можно размещать как на специально
созданных объектах UserForm,
например на одном, рис. 1.1, или на
нескольких, рис. 1.2, так и на листах
Excel,
рис. 1.3, используя при этом для вызова
и заполнения кнопки (объекты
CommandButton).
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #