Remkomplekty.ru

IT Новости из мира ПК
6 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Optionbutton vba excel примеры

Optionbutton vba excel примеры

Элемент управления OptionButton

Переключатель OptionButton подобен флажку CheckBox , так как он тоже позволяет отображать и выбирать значение типа True/False или да/нет. Обычно переключатель имеет вид маленького кружка, внутри которого отображается (если переключатель выбран) или не отображается (если переключатель не выбран) черная точка. Щелкая на переключателе, пользователь выбирает его или отменяет его выбор. Отличие переключателя OptionButton от флажка CheckBox состоит в том, что из группы может быть выбран только один переключатель (тогда как флажков, принадлежащих одной группе, допускается выбрать сразу несколько).

рис . 1.1 Элемент управления OptionButton на панели ToolBox

рис. 2.2 Элемент управления OptionButton на форме

рис. 2.3 Пример элемента управления OptionButton на форме

Чтобы создать группу переключателей, поместите их на элементе управления Frame. Обратите внимание, что вначале необходимо добавить в окно формы панель Frame, а затем разместить на ней переключатели OptionButton. Чтобы сделать переключатель частью группы, его сразу же следует поместить на панель Frame. Таким образом перетащить уже созданный переключатель из окна формы на панель вы не сможете.
Еще один способ создания группы переключателей состоит в использовании свойства GroupName. Все элементы управления OptionButton, свойство GroupName которых имеет одинаковое значение, считаются частью одной группы. Выбор одного такого переключателя исключает возможность выбора других, даже если они не расположены на одной панели.
Присвоение свойству Value переключателя значения True сопровождается автоматическим присвоением значения False этому же свойству других переключателей, относящихся к данной группе. Чтобы определить, какой переключатель группы был выбран, программа должна просмотреть все элементы OptionButton и найти тот из них, свойству Value которого присвоено значение True.

Напишем небольшой тестовый пример. Для начала кинем на форму два компонента OptionButton, один из них назовем opPlus, другой opMinus. И дадим имена: “Сложение” и “Вычитание” соответственно. У объекта opPlus установим в true свойство value*:

Теперь добавим два текстовых поля ( TextBox ), с именами txNumber1 и txNumber2, текст у них очистим. Еще нам понадобиться кнопочка (CommandButton). Назовем ее cmDo и назначим заголовок “Действие”. Вот что должно в итоге получиться*:

Теперь напишем для кнопочки обработчик нажатия:

Private Sub cmDo_Click()
If opPlus.Value = True Then
MsgBox (Val(txNumber1.Text) + Val(txNumber2.Text))
End If
If opMinus.Value = True Then
MsgBox (Val(txNumber1.Text) – Val(txNumber2.Text))
End If
End Sub

Данная программа у нас проверяет, какой вариант выбран, сложение или вычитание и делает с числом соответствующее действие. Главной особенностью кнопки OptionButton в том, что невозможно выбрать сразу две кнопочки. Запустите программу и убедитесь в этом сами:

Добавим еще и умножение. Для этого кинем на форму еще один OptionButton с именем opMult и заголовком “Умножить”. Добавим несколько строчек в нашу программу:

Private Sub cmDo_Click()
If opPlus.Value = True Then
MsgBox (Val(txNumber1.Text) + Val(txNumber2.Text))
End If
If opMinus.Value = True Then
MsgBox (Val(txNumber1.Text) – Val(txNumber2.Text))
End If
If opMult.Value = True Then
MsgBox (Val(txNumber1.Text) * Val(txNumber2.Text))
End If
End Sub

Запустим программу и убедимся, что она работает правильно:

Класс OptionButton — работа с переключателями VBA

В этой статье мы рассмотрим такой элемент управления как OptionButton – Переключатель. Полагаю, многим приходилось видеть форму, на которой находятся несколько надписей и возле каждой надписи маленькая точка. Пользователь может выбрать только один элемент из списка. Компонент OptionButton в vba также называется RadioButton – по аналогии с радио, где можно выбрать одновременно только одну радиостанцию.

Если вы расположите на форме несколько переключателей vba OptionButton, то они будут между собой связаны, то есть вы сможете нажать одновременно только на один. Что бы создать отдельную группу объектов OptionButton, их нужно поместить в отдельную рамку или на отдельную вкладку.

Основные свойства для переключателя следующие:

Name – имя объекта, оно назначается автоматически в стиле: OptionButton1, OptionButton2, … , OptionButtonN. Но вы можете переименовать объект так, как вам подходит.

Caption – надпись, которая будет отображаться рядом с переключателем, при добавлении на форму компонента OptionButton в vba, свойство caption автоматически принимает такое же значение как и свойство Name.

Enabled – позволяет сделать активным и доступным (значение true) объект, или наоборот, сделать объект неактивным и недоступным (значение false).

Value – содержит логическое значение: true – элемент управления включен (вы нажали на переключатель) или false – элемент управления выключен.

Visible – определяет видимость объект, принимает логическое true – отображать или false – не отображать компонент.

Как и для большинства управляющих компонентов, для OptionButton главным событием vba является Change – событие возникает при включении/выключении радио-кнопки.

Хорошо, теперь давайте приступим к практике. Добавим в проект новую форму (я ее назвал OBForm) и новый модуль (OBModule), за добавление отвечает меню Insert, пункты UserForm и Module.

В окне свойств для формы (UserForm) установите следующие значения:

  • Caption – работа с компонентом OptionButton
  • Width – 320
  • Height – 134
Читать еще:  Textbox в excel

Далее надо добавить на поверхность формы четыре переключателя, пусть они будут в одном столбике, справа от них добавьте один под другим два текстовых поля TextBox (соответственно TestBox1 и TextBox2), а под ними одну простую кнопку (CommandButton). Как все должно выглядеть можете посмотреть на рисунке.

Как и прежде, в редакторе кода для модуля следует прописать следующую процедуру:

Тут мы просто указываем, что при запуске макроса должна отобразиться форма, Show — показать.

Хорошо, теперь немного о логике работы: возле каждого переключателя прописано имя элемента, при выборе заданного объекта OptionButton в vba (или RadioButton), в первом текстовом поле (TextBox1) должно отобразиться описание для выбранного элемента управления. При нажатии на кнопку во втором текстовом поле (TextBox2) должно отобразиться значение свойства Caption выбранного объекта OptionButton.

Хорошо, теперь пропишем в окне редактора кода для формы следующие процедуры:

Теперь проанализируем код:

CommandButton1_Click – тут происходит обработка клика по кнопке. В цикле for … each происходит перебор коллекции всех объектов OptionButton и происходит проверка значения свойства Value, если оно ровно true – значит, элемент выбран. Во второе текстовое поле будет записываться значение свойства Caption для выбранного объекта.

Процедуры от OptionButton1_Change до OptionButton4_Change обрабатывают событие Change. Как только мы выберем переключатель OptionButton в VBA, в первое текстовое поле запишется текстовая строка. Строка TextBox1.Text = «» фактически является лишней, так как содержимое текстового поля автоматически затирается при присвоении свойству Text нового текста.

Спасибо за внимание. Автор блога Владимир Баталий

VBA-Урок 12.2. Элементы управления (Controls)

Элементы управления имеют все виды свойств и много событий связанных с ними, но сейчас мы лишь рассмотрим несколько из них, которые используются в VBA программировании:

Давайте начнем с добавления 3-х элементов управления — Label , TextBox и CommandButton :

Давайте сейчас отредактируем название и свойства этого элемента управления (используя свойство Caption , которое содержит текст). Мы хотим получить следующий результат:

Сейчас, когда мы введем номер и нажмем ОК — ничего не произойдет.

Чтобы создать какое-то событие, мы начнем добавлять событие, которое введет значение из текстового окна в ячейки А1 и закроет Форму.

Вы можете получить доступ к опциям, которые показаны ниже, дважды щелкнув по элементу управления:

Данный выпадающий список содержит различные элементы управления и эту Форму.

Выберите кнопку (Button) и событие Click:

Введенное значение сейчас уже будет сохранено в ячейке А1 перед закрытием этой Формы ( UserForm ).

Добавьте вторую подпись (Label) и измените следующие свойства: Caption , Forecolor (color: red) and Visible (False, чтобы скрыть элемент управления по умолчанию) :

Теперь давайте добавим событие, которое будет запускаться, когда значение в поле будет изменено. Событие отобразит сообщение об ошибке, если значение не является цифровым.

Введенное значение будет тестироваться каждый раз при вводе очередного символа.

Нам еще нужно предотвратить валидацию формы, если значение не является числом.

Для того, чтобы не оставлять правую сторону формы пустой, когда там нет сообщения об ошибке, мы можем уменьшить её размер, откорректировав свойство Width этой формы:

Вы можете скачать Excel файл с примером: userform1.xls

Checkboxes

Далее пример как использовать CheckBox :

Когда чекбокс отмеченный/неотмеченный, значение связанной ячейки может быть изменено из-за использования события Click:

В этом примере, чекбокс стартует неотмеченным, когда Форма открывается впервые.

Чтобы проверить бокс когда значения соответствующих ячеек является & quot; Отмечено & quot;, мы запустим проверку когда форму активировано, используя UserForm_Initialize:

Здесь вы можете посмотреть пример в готовом Excel файле: userform2.xls

Кнопки опций (Option Buttons)

Пользователь может выбрать только одну кнопку-опцию на «группу» в отличие от чекбоксов.

Чтобы создать «группу», сначала вставьте Frame, а затем OptionButton :

Здесь вы можете посмотреть пример в готовом Excel файле: userform3.xls

Как только форма была отправлена, мы введем данные в ячейку, которая связана с названием колонки и row_value chosen.

Для того, чтобы знать какие опции были выбраны, мы могли бы сделать то же самое что и в предыдущем примере (с чекбоксами), но мы используем цикл, чтобы уменьшить размер кода.

Мы собираемся использовать цикл For Each , тип цикла, который мы еще до этого не рассматривали. Этот цикл позволяет выполнять инструкции для каждого объекта в «группе объектов»:

Сейчас эта форма вводит значение «Ячейка выбрана!» в ячейку, которая была выбрана.

Чтобы избежать баги, нам необходимо проверить , что пользователь выбрал правильно с двух наборов опций.

В этом примере, когда форма еще не завершена, кнопка «Подтверждение» («Confirm») появится в сером (будет деактивирована). Это не самое простое решение, но это хороший пример того, почему функции/процедуры является Полезные внутри формы (UserForm).

Измените текст и свойство Enabled , чтобы деактивировать кнопку.

Результат будет следующий:

В предыдущем коде мы использовали два For Each цикла, чтобы получить значение опционных кнопок (option buttons). Сейчас нам нужно использовать те же значения для кнопки «Подтверждение» («Confirm») и событие Click для десяти опций.

Читать еще:  Checkbox vba excel

Для этого нам не нужно копировать циклы для каждого события, мы вызовем их через функцию.

Начнем с предыдущего кода и модифицируя его, мы достигнем этого результата:

Все что нам осталось сделать, это создать процедуру, которая проверяет , что кнопки опций были выбраны корректно (через вызов двух функций), и которые активируют эту кнопку когда нужно.

Опять же, проверка выполняется в отдельной процедуре, чтобы избежать копирования кода 10 раз для каждого события каждого опционной кнопки:

Optionbutton vba excel примеры

private sub OptionButton1_change()
if optionButton1.value = true then
TextBox4 = 0,25 * TextBox1 * TextBox2 * TextBox3
end if
end sub

private sub OptionButton2_change()
if optionButton2.value = true then
TextBox4 = 0,63 * TextBox1 / TextBox2 / TextBox3
end if
end sub

но у меня другой вариант
Private Sub TextBox1_Change()
Scet
End Sub
Private Sub TextBox2_Change()
Scet
End Sub
Private Sub TextBox3_Change()
Scet
End Sub
Private Sub Scet()
If IsNumeric(TextBox1.Text) = True And Not Val(TextBox2.Text) = 0 And Not Val(TextBox3.Text) = 0 Then

rez = 1.2 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))
rez = 0.95 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))

TextBox4.Text = Str$(rez)
TextBox4.Text = Format(rez, «###0.00»)
Else
TextBox4.Text = «»
End If
End Sub

мне нада чтоб в зависимости от выбора OptionButton1
выбирался первый rez= 1.2 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))
а при выборе OptionButton2
rez= 0.95 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))

Private Sub Scet()
If IsNumeric(TextBox1.Text) = True And Not Val(TextBox2.Text) = 0 And Not Val(TextBox3.Text) = 0 Then

rez1 = 1.2 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))
rez2 = 0.95 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))’здесь нужно ввести raz1 и raz2 иначе у тебя rez= 1.2 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text)) пропадает в следующей строчке.

if OptionButton1.value=true then
TextBox4.Text = Str$(rez1)
TextBox4.Text = Format(rez1, «###0.00»)
Else
TextBox4.Text = «»
End If

if OptionButton2.value=true then
TextBox4.Text = Str$(rez2)
TextBox4.Text = Format(rez2, «###0.00»)
Else
TextBox4.Text = «»
End If

End Sub

или так в зависимости от нужного результата (я просто не совсем понял задачу )

If IsNumeric(TextBox1.Text) = True And Not Val(TextBox2.Text) = 0 And Not Val(TextBox3.Text) = 0 Then

if OptionButton1.value=true then rez = 1.2 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))
if OptionButton2.value=true then rez = 0.95 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))

TextBox4.Text = Str$(rez)
TextBox4.Text = Format(rez, «###0.00»)

to V86 Огромное спасибо.
вариант
или так в зависимости от нужного результата (я просто не совсем понял задачу )

If IsNumeric(TextBox1.Text) = True And Not Val(TextBox2.Text) = 0 And Not Val(TextBox3.Text) = 0 Then

if OptionButton1.value=true then rez = 1.2 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))
if OptionButton1.value=true then rez = 0.95 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))

TextBox4.Text = Str$(rez)
TextBox4.Text = Format(rez, «###0.00»)

как раз то что нужно
всё работает.

при выборе OptionButton1 выдает результат

а когда выбираю OptionButton2 результат не обновляется автоматически
приходится менять какое нибудь значение

OptionButton2 я поменял

Теперь вот в другом запара TextBox которые скажем так РЕЗУЛЬТАТ
при изменении TextBox (которые ВВОД ДАННЫХ)
не обновляются автоматически

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

Private Sub TextBox1_Change()
Scet
End Sub
Private Sub TextBox2_Change()
Scet
End Sub
Private Sub TextBox3_Change()
Scet
End Sub

Private Sub Scet()
If IsNumeric(TextBox1.Text) = True And Not Val(TextBox2.Text) = 0 And Not Val(TextBox3.Text) = 0 Then
if OptionButton1.value=true then rez = 1.2 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))
if OptionButton2.value=true then rez = 0.95 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))
TextBox4.Text = Str$(rez)
TextBox4.Text = Format(rez, «###0.00»)
Else
TextBox4.Text = «»
End If
End Sub

Если все так, то по идее должно работать. Тогда когда ты вводишь в text1, text2 или text3 выполняеться процедура Scet, где полученный результат отправляеться в text4. Если нет, тогда косяк где то еще.

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

Private Sub TextBox1_Change()
Scet
End Sub
Private Sub TextBox2_Change()
Scet
End Sub
Private Sub TextBox3_Change()
Scet
End Sub

Private Sub Scet()
If IsNumeric(TextBox1.Text) = True And Not Val(TextBox2.Text) = 0 And Not Val(TextBox3.Text) = 0 Then
if OptionButton1.value=true then rez = 1.2 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))
if OptionButton2.value=true then rez = 0.95 * (Val(TextBox1.Text)) * ((Val(TextBox2.Text) ^ 1.5)) * (Val(TextBox3.Text))
TextBox4.Text = Str$(rez)
TextBox4.Text = Format(rez, «###0.00»)
Else
TextBox4.Text = «»
End If
End Sub

Если все так, то по идее должно работать. Тогда когда ты вводишь в text1, text2 или text3 выполняеться процедура Scet, где полученный результат отправляеться в text4. Если нет, тогда косяк где то еще.

Суть в том что TextBox4 используется в другой формуле, ну например
TextBox8=TextBox4*TextBox7 ( ну что-то типа того)

когда я ввожу данные в TextBox1 TextBox2 TextBox3 , то в TextBox4 получается результат

но потом когда я меняю данные в каком-нибудь из TextBox (1. 2 .3)
то в TextBox8 данные не обновляются пока я не щелкну на TextBox7 (просто ввожу заново)
.

VBA-редактор

3.4. Окно Properties — управление свойствами

Выделите кнопку и посмотрите на окно Properties. Теперь в нем отображаются ее свойства.

Читать еще:  Как создать надстройку в excel

Свойства элементов управления могут быть отображены в двух разных представлениях. Первое – это алфавитный список (вкладка Alphabetic ) второе – отображение по категориям ( Categorized ). Начинающим обычно удобнее пользоваться видом свойств объекта по категориям (рис. 3.5.). Объединение сходных свойств в группы позволяет легче разбираться с их предназначением.

На вкладке Categorized свойства объектов объединены в группы. Для удобства группы можно сворачивать и разворачивать. Давайте рассмотрим особенности различных групп, отображаемых в этом окне.

  • Appearance (Внешний вид) — отвечает за отображение объекта , за надписи на нем, за его имя.
  • Behavior (Поведение) — отвечает за поведение объекта. Например, за отображение многострочного текста.
  • Font (Шрифт) — содержит свойство, отвечающее за шрифт, которым сделаны надписи на объекте.
  • Misc (Разное) — различные настройки. Например — настройки указателя мыши, когда он будет находиться над объектом.
  • Picture (Изображение) — информация об изображении, которое может отображаться на объекте.
  • Position (Расположение) — определяет размер и положение объекта.

У форм есть группа свойств Scrolling (Скроллинг) — свойства этой группы управляют прокруткой формы.

Давайте рассмотрим свойства, общие для практически всех объектов — форм, различных элементов управления.

3.5. Важнейшие свойства элементов управления

Name (Имя) — очень важное свойство. По имени к объекту можно обратиться из программного кода.

Желательно давать объектам осмысленные имена — так гораздо легче пользоваться ими при разработке программ. Следите за тем, чтобы имена ваших объектов состояли лишь из цифр, латинских букв, символов подчеркивания. Если вы дадите объекту имя, например, содержащее знак «/», редактор не позволит использовать такое имя. При именовании объектов можно пользоваться и русскими буквами, но лучше этого не делать.

Переименуем форму в frm_Main , а кнопку – в cmd_First . Один из стилей именования объектов (так называемая венгерская нотация ) заключается в использовании префикса, указывающего на тип объекта .

В табл. 3.1. вы можете найти префиксы, которые можно использовать при именовании различных элементов управления.

Вы можете использовать свой собственный стиль именования, главное — это чтобы имена были понятными и сразу указывали на назначение объекта.

Caption (Надпись) — определяет надпись, которая видна на элементе управления. Изменим свойство Caption для объекта frm_Main на «Моя первая программа «, а для объекта cmd_First — «Нажми меня!».

Width (Ширина), Height ( Высота ) — определяют ширину и высоту объекта, которые измеряются в пикселях.

Font ( Шрифт ) — при попытке редактирования этого свойства открывается окно настройки параметров шрифта, в котором можно выбрать гарнитуру, размер, начертание шрифта.

ForeColor (Цвет шрифта) — задает цвет шрифта элемента управления.

BackColor ( Цвет фона ) — позволяет задать цвет фона элемента управления.

У кнопок и других элементов управления есть специфические свойства. В их число входят:

Top ( Расстояние от верха формы), Left ( Расстояние от левого края формы) — задают положение элемента на форме.

Visible (Видимость) — может принимать значения True ( Истина ) — то есть объект будет видимым, и False ( Ложь ) — объект будет невидимым.

Enable (Включено) — если это свойство установлено в True (Истина) — объектом можно пользоваться. Если в False (Ложь) — объект будет неактивен. Например, кнопку «Далее» можно сделать неактивной до тех пор, пока пользователь не заполнит все обязательные поля ввода данных.

Некоторых других свойств объектов мы коснемся в дальнейшем.

Продолжим знакомство с элементами управления. Сейчас нас интересует элемент управления Label ( Метка ). Метки используются для размещения текстовой информации на формах. Добавьте в вашу форму новую метку (если сомневаетесь в названии элемента управления — наведите на него указатель мыши в панели инструментов — через некоторое время появится подсказка), дайте ей имя lbl_First и разместите на ней надпись «Добро пожаловать в мою первую программу!». Чтобы разместить такую надпись на метке, можно модифицировать ее свойство Caption . Но можно поступить по -другому — выделить элемент управления и щелкнуть в том его месте, где расположен текст и отредактировать его прямо на элементе управления.

Мы еще не написали ни единой строчки кода, но уже можем запустить нашу первую программу. Щелкните по созданной форме и нажмите зеленую кнопку на панели инструментов редактора VBA (или выберите команду меню Run • Sub/User Form, можете вместо всего этого просто нажать клавишу F5 ).

В результате вы увидите только что созданную форму во всей красе (рис. 3.6.).

Если вы попробуете нажать на кнопку «Нажми меня!» — ничего не произойдет. Это неудивительно — мы ведь ничего не делали с кнопкой. Пора это исправить. Чтобы снова вернуться в редактор, закройте форму с помощью красной кнопки с крестом, расположенной в правой верхней части ее окна.

Дважды щелкните мышью по кнопке cmd_First . Откроется редактор кода . В нем будет автоматически создан каркас процедуры обработчика события Click для кнопки. Об этом читайте дальше.

Ссылка на основную публикацию
Adblock
detector