2016-05-23 3 views
0

У меня есть пользовательская форма с 5 кнопками флажков для 5-ти pdf-версий. Ну, когда пользователь вызывает пользовательскую форму, пользовательская форма инициализирует 5 кнопок флажков, чтобы выбрать один из них. На данный момент код очень статичен и не очень хорош.Как динамически добавлять флажки-кнопки в пользовательскую форму в VBA

Вот пример:

If rs.EOF = False Then 
    Do Until rs.EOF Or i = 5 
    Select Case i 
     Case Is = 0 
     frmOne.Version5.Visible = True 
     frmOne.Version5.Caption = rs!versNo & "#" & rs!versFrom 
     frmOne.Version5.tag = rs!versNo & "_" & rs!FiD & ".pdf" 
     Case Is = 1 
     frmOne.Version4.Visible = True 
     frmOne.Version4.Caption = rs!versNo & "#" & rs!versFrom 
     frmOne.Version4.tag = rs!versNo & "_" & rs!FiD & ".pdf" 
     Case Is = 2 
     frmOne.Version3.Visible = True 
     frmOne.Version3.Caption = rs!versNo & "#" & rs!versFrom 
     frmOne.Version3.tag = rs!versNo & "_" & rs!FiD & ".pdf" 
     Case Is = 3 
     frmOne.Version2.Visible = True 
     frmOne.Version2.Caption = rs!versNo & "#" & rs!versFrom 
     frmOne.Version2.tag = rs!versNo & "_" & rs!FiD & ".pdf" 
     Case Is = 4 
     frmOne.Version1.Visible = True 
     frmOne.Version1.Caption = rs!versNo & "#" & rs!versFrom 
     frmOne.Version1.tag = rs!versNo & "_" & rs!FiD & ".pdf" 
    End Select 
    i = i + 1 
    rs.MoveNext 
    Loop 
End If 

Чтобы много кода я думаю. Так что мое намерение состояло в том, чтобы определить его как на примере ниже, но это не работает:

If rs.EOF = False Then 
    For i = 1 To 5 
     With frmOne 
     .Version & i &.Visible = True 
     .Version & i &.Caption = rs!versNo & "#" & rs!versFrom 
     .Version & i &.tag = rs!versNo & "_" & rs!FiD & ".pdf" 
     End With 
     rs.MoveNext 
    Next i 
End If 

ли есть кто-нибудь представление о том, как я могу исправить это?

ответ

1

Вы можете обратиться к Controls коллекции, используя имя:

If rs.EOF = False Then 
    For i = 1 To 5 
     With frmOne.Controls("Version" & i) 
     .Visible = True 
     .Caption = rs!versNo & "#" & rs!versFrom 
     .tag = rs!versNo & "_" & rs!FiD & ".pdf" 
     End With 
     rs.MoveNext 
    Next i 
End If 

Чтобы на самом деле добавить элементы управления во время выполнения тоже:

Do While not rs.EOF 
    i = i + 1 
     With frmOne.Controls.Add("Forms.CheckBox.1", "Version" & i, True) 
     .Caption = rs!versNo & "#" & rs!versFrom 
     .tag = rs!versNo & "_" & rs!FiD & ".pdf" 
     End With 
     rs.MoveNext 
Loop 
+0

И что есть, когда флажки не предопределены в пользовательской форме? Как добавить флажки в пользовательскую форму? – yuro

+0

Используйте метод 'Add' коллекции элементов управления. – Rory

+0

Вы хотите просто определить 'С помощью frmOne.Controls.Add (« Version »& i) ...' – yuro

1

идти, как следует:

If rs.EOF = False Then 
    For i = 1 To 5 
     With frmOne.Controls("Version" & i) '<~~ use Controls collection of Userform object 
      .Visible = True 
      .Caption = rs!versNo & "#" & rs!versFrom 
      .Tag = rs!versNo & "_" & rs!FiD & ".pdf" 
     End With 
     rs.MoveNext 
    Next i 
End If 
+0

взгляд на комментарий ниже! – yuro

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