2016-08-17 6 views
0

Я хочу построить опрос с использованием excel и vba. У меня есть таблица с вопросами и ответами. Когда начнется опрос, мой код отобразит ответы, заменив метки меток на форме. Я возьму их ответ и напишу их в столбце, используя значение «Истина» или «Ложное» флажка.Excel VBA: как пропустить флажки на основе имени

Переменная «aRow» - это количество ответов для каждого вопроса. «lastAns» - номер строки последнего ответа. В зависимости от количества ответов некоторые флажки будут скрыты, показаны. «CheckBox1» - «CheckBox4» - это имена флажков.

Следующий код работает, но он слишком длинный, и я хочу иметь лучший метод для циклического выбора и замены их меток каждый раз. Пожалуйста, покажите мне, как это сделать! Спасибо вам большое!

 `lastAns = Cells(qRow, 5).End(xlDown).Row + 1 
     aRow = lastAns - qRow 
     If aRow >= 1 Then 
      Me.CheckBox1.Visible = True 
      Me.CheckBox1.Caption = Cells(qRow, 5) 
      Else: Me.CheckBox1.Visible = False 
     End If 
     If aRow >= 2 Then 
      Me.CheckBox2.Visible = True 
      Me.CheckBox2.Caption = Cells(qRow + 1, 5) 
      Else: Me.CheckBox2.Visible = False 
      End If 
     If aRow >= 3 Then 
      Me.CheckBox3.Visible = True 
      Me.CheckBox3.Caption = Cells(qRow + 2, 5) 
      Else: Me.CheckBox3.Visible = False 
      End If 
     If aRow >= 4 Then 
      Me.CheckBox4.Visible = True 
      Me.CheckBox4.Caption = Cells(qRow + 3, 5) 
      Else: Me.CheckBox4.Visible = False 
      End If 
       .....SAME CODE CONTINUES TILL 7...` 
+0

Рабочий код нуждается в оптимизации должны быть размещены на [Просмотр Кода] (https: // codereview.stackexchange.com/). AFAIK вам нужно будет создать имя элемента управления в виде строки и передать его как ключ к коллекции элементов управления. –

ответ

1

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

arow = lastAns - qRow 
    Dim i As Long, ctl As Control 
    For i = 1 To 4 
     Set ctl = Me.Controls("CheckBox" & i) 
     If i <= arow Then 
      ctl.Visible = True 
      ctl.Caption = Cells(qRow + i - 1, 5) 
     Else 
      ctl.Visible = False 
     End If 
    Next i 

 Смежные вопросы

  • Нет связанных вопросов^_^