Заполните текстовое поле изменяемым текстом в зависимости от комбинации выбора переключателей (VBA Excel) - PullRequest
0 голосов
/ 27 августа 2018

Мне нужна помощь в получении правильного кода для выполнения следующих действий:

  • У меня есть 4 группы переключателей внутри фрейма в пользовательской форме
  • Каждая группа является простойДа / Нет Радиокнопка
  • У меня есть текстовое поле, которое я хочу автозаполнить с диапазоном оценок AD в зависимости от количества выбранных радиокнопок «да».
  • «Нет»«Флажки действительно не должны ничего делать с текстовым полем

    • Имя пользовательской формы = TP_UF
    • Имя фрейма = fun_opt_frame
    • Имя кнопки опции для« Да »=fun_score_yes1-4
    • Имя текстового поля = fun_scorebox

Логика:

  • 4 Yesses = A
  • 3Да = B
  • 2 Да = C
  • 1 Да = D

Неважно, в каком порядке выбраны дачи, их общее количество.Я пытался использовать код с помощью фрейма, но не уверен, что это лучший способ.Рамка для этих переключателей не нужна ни по какой другой причине, кроме как для облегчения кодирования.Так что я мог бы выбросить рамку, если не нужно, чтобы это работало.

Я не уверен, с чего начать.Любая помощь будет оценена.

рис.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Я закончил с этим по-другому, и у меня все получилось с помощью счетчика.Спасибо за помощь!Размещение кода здесь на случай, если кому-то еще это понадобится.

    Option Explicit

    Private Sub OptionButton1_Change()
    set_counter
    End Sub

    Private Sub OptionButton2_Change()
    set_counter
    End Sub

    Private Sub OptionButton3_Change()
    set_counter
    End Sub

    Private Sub OptionButton4_Change()
    set_counter
    End Sub

    Private Sub OptionButton5_Change()
    set_counter
    End Sub

   Private Sub OptionButton6_Change()
   set_counter
   End Sub

   Private Sub OptionButton7_Change()
   set_counter
   End Sub

   Private Sub OptionButton8_Change()
   set_counter
   End Sub

   Private Sub set_counter()
    Dim x As Integer, counter As Integer
     Me.TextBox1.Value = ""
     counter = 0
     For x = 1 To 8 Step 2
       If Me.Controls("OptionButton" & x).Value = True Then counter = counter + 1
     Next x
        Me.TextBox1.Value = Choose(counter, "D", "C", "B", "A")
   End Sub

  Private Sub UserForm_Activate()
    Me.TextBox1.Value = ""
  End Sub

  Private Sub UserForm_Click()
    Dim x As Integer
      Me.TextBox1.Value = ""
      For x = 1 To 8
         Me.Controls("OptionButton" & x).Value = False
      Next x
  End Sub
0 голосов
/ 27 августа 2018

Самый быстрый и простой способ понять это, я думаю, следующий код.Вы должны поместить код в модуль класса пользовательской формы.

Option Explicit

Dim opt1 As Byte
Dim opt2 As Byte
Dim opt3 As Byte
Dim opt4 As Byte

Private Sub opt1Yes_Click()
    opt1 = 1
    EvalOpt
End Sub
Private Sub opt1No_Click()
    opt1 = 0
    EvalOpt
End Sub
Private Sub opt2yes_Click()
    opt2 = 1
    EvalOpt
End Sub
Private Sub opt2No_Click()
    opt2 = 0
    EvalOpt
End Sub
Private Sub opt3yes_Click()
    opt3 = 1
    EvalOpt
End Sub
Private Sub opt3No_Click()
    opt3 = 0
    EvalOpt
End Sub
Private Sub opt4yes_Click()
    opt4 = 1
    EvalOpt
End Sub
Private Sub opt4No_Click()
    opt4 = 0
    EvalOpt
End Sub

Private Sub EvalOpt()
Dim sumOpt As Byte
Dim res As String
    sumOpt = opt1 + opt2 + opt3 + opt4
    Select Case sumOpt
    Case 1: res = "D"
    Case 2: res = "C"
    Case 3: res = "B"
    Case 4: res = "A"
    Case Else: res = ""
    End Select
    Me.fun_scorebox.text = res
End Sub

Я предположил, что кнопки выбора названы opt1Yes, opt1No, opt2Yes, opt2No и т. Д. Более продвинутым решением, вероятно, было бы использование модулей classe.и таким образом «собрать» кнопки выбора.

...