Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Работа с группой OptionButton - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Работа с группой OptionButton (Макросы Sub)
Работа с группой OptionButton
DJ_Marker_MC Дата: Среда, 16.10.2013, 11:02 | Сообщение № 1
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Всем доброе утро.
Коллеги, помогите пожалуйста оптимизировать один кусочек кода.
Есть у меня на форме 4 OptionButton - их объединил по GroupName - KURS.
Так Вот понимаю что как то неправильно делать вот так в коде и наверное это делается как то через GroupName:

[vba]
Код
Private Sub OptionButton1_Click()
TextBox3.Value = 1
TextBox3.Enabled = False
End Sub

Private Sub OptionButton2_Click()
TextBox3.Value = ""
TextBox3.Enabled = True
TextBox3.Locked = False
End Sub

Private Sub OptionButton3_Click()
TextBox3.Value = ""
TextBox3.Enabled = True
TextBox3.Locked = False
End Sub

Private Sub OptionButton4_Click()
TextBox3.Value = ""
TextBox3.Enabled = True
TextBox3.Locked = False
End Sub
[/vba]

но как сделать по другому не знаю, как можно сократить такие 4 куска в 1?

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

[vba]
Код
If OptionButton1.Value = True Then
     Cells(iRow, 7).Value = "UAH"
Else
     If OptionButton2.Value = True Then
         Cells(iRow, 7).Value = "USD"
     Else
         If OptionButton3.Value = True Then
             Cells(iRow, 7).Value = "EUR"
         Else
             If OptionButton4.Value = True Then
             Cells(iRow, 7).Value = "RUR"
             End If
         End If
     End If
End If
[/vba]

Я понимаю что заменить 4 такие радиоточки на 1 комбобокс и проблема исчезнет, но хочу именно через радиоточки.
Заранее благодарю за помощь.
К сообщению приложен файл: 1504656.xlsm (91.7 Kb)
 
Ответить
СообщениеВсем доброе утро.
Коллеги, помогите пожалуйста оптимизировать один кусочек кода.
Есть у меня на форме 4 OptionButton - их объединил по GroupName - KURS.
Так Вот понимаю что как то неправильно делать вот так в коде и наверное это делается как то через GroupName:

[vba]
Код
Private Sub OptionButton1_Click()
TextBox3.Value = 1
TextBox3.Enabled = False
End Sub

Private Sub OptionButton2_Click()
TextBox3.Value = ""
TextBox3.Enabled = True
TextBox3.Locked = False
End Sub

Private Sub OptionButton3_Click()
TextBox3.Value = ""
TextBox3.Enabled = True
TextBox3.Locked = False
End Sub

Private Sub OptionButton4_Click()
TextBox3.Value = ""
TextBox3.Enabled = True
TextBox3.Locked = False
End Sub
[/vba]

но как сделать по другому не знаю, как можно сократить такие 4 куска в 1?

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

[vba]
Код
If OptionButton1.Value = True Then
     Cells(iRow, 7).Value = "UAH"
Else
     If OptionButton2.Value = True Then
         Cells(iRow, 7).Value = "USD"
     Else
         If OptionButton3.Value = True Then
             Cells(iRow, 7).Value = "EUR"
         Else
             If OptionButton4.Value = True Then
             Cells(iRow, 7).Value = "RUR"
             End If
         End If
     End If
End If
[/vba]

Я понимаю что заменить 4 такие радиоточки на 1 комбобокс и проблема исчезнет, но хочу именно через радиоточки.
Заранее благодарю за помощь.

Автор - DJ_Marker_MC
Дата добавления - 16.10.2013 в 11:02
nilem Дата: Среда, 16.10.2013, 11:21 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Здрасьте.
Мне кажется можно и так оставить. Или как-то так
[vba]
Код
Private Sub CommandButton1_Click()
Dim ctl As Control
For Each ctl In Me.Frame1.Controls
      If ctl.Value = True Then
      MsgBox ctl.Name
      Cells(10, 1) = ctl.Caption
      End If
Next
End Sub
[/vba]
добавил фрейм с радиокнопками и баттон с Private Sub CommandButton1_Click() (см. 1-ю процедуру в модуле формы)
К сообщению приложен файл: 1504656-1.xlsm (92.7 Kb)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Среда, 16.10.2013, 11:21
 
Ответить
СообщениеЗдрасьте.
Мне кажется можно и так оставить. Или как-то так
[vba]
Код
Private Sub CommandButton1_Click()
Dim ctl As Control
For Each ctl In Me.Frame1.Controls
      If ctl.Value = True Then
      MsgBox ctl.Name
      Cells(10, 1) = ctl.Caption
      End If
Next
End Sub
[/vba]
добавил фрейм с радиокнопками и баттон с Private Sub CommandButton1_Click() (см. 1-ю процедуру в модуле формы)

Автор - nilem
Дата добавления - 16.10.2013 в 11:21
DJ_Marker_MC Дата: Среда, 16.10.2013, 11:26 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
nilem, БОЛЬШОЕ СПАСИБО! я так понял, данный вариант можно взять вместо громоздкой проверки IF ... THEN в конце, а вот чем то заменить 4 шт OptionButton1_Click() нечем да и незачем?


Сообщение отредактировал DJ_Marker_MC - Среда, 16.10.2013, 11:33
 
Ответить
Сообщениеnilem, БОЛЬШОЕ СПАСИБО! я так понял, данный вариант можно взять вместо громоздкой проверки IF ... THEN в конце, а вот чем то заменить 4 шт OptionButton1_Click() нечем да и незачем?

Автор - DJ_Marker_MC
Дата добавления - 16.10.2013 в 11:26
nilem Дата: Среда, 16.10.2013, 11:42 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Если бы у Вас были 40 радиокнопок, то эффективнее было бы использовать класс, и изменение состояния любой из этих р-кнопок всегда приводило бы к возникновению одно и того же события. Так реально удобнее.
Но из-за 4-х кнопок лучше не заморачиваться и оставить OptionButton1_Click() как есть. имхо.

Ну да, а проверку лучше делать с ctl as Control


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Среда, 16.10.2013, 11:43
 
Ответить
СообщениеЕсли бы у Вас были 40 радиокнопок, то эффективнее было бы использовать класс, и изменение состояния любой из этих р-кнопок всегда приводило бы к возникновению одно и того же события. Так реально удобнее.
Но из-за 4-х кнопок лучше не заморачиваться и оставить OptionButton1_Click() как есть. имхо.

Ну да, а проверку лучше делать с ctl as Control

Автор - nilem
Дата добавления - 16.10.2013 в 11:42
DJ_Marker_MC Дата: Среда, 16.10.2013, 11:47 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Благодарю за разъяснение. Насчет классов, то пока что до них еще не дорос)))
 
Ответить
СообщениеБлагодарю за разъяснение. Насчет классов, то пока что до них еще не дорос)))

Автор - DJ_Marker_MC
Дата добавления - 16.10.2013 в 11:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Работа с группой OptionButton (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!