سؤال

The user will enter the number of members first. If the user enter 1 member then only 1 textbox will appear for the user to enter. If the user enter 10 member then all 10 textbox will appear. It works for If Else but it is tedious for me to do it 10 times. I don't know how do I change it from If Else to For Loop

     'Using If Else
     Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
 Select Case txtNoMember.Value
 Case Is = 1
     txtMember01.Visible = True
     txtMember02.Visible = False
     txtMember03.Visible = False
     txtMember04.Visible = False
     txtMember05.Visible = False
     txtMember06.Visible = False
     txtMember07.Visible = False
     txtMember08.Visible = False
     txtMember09.Visible = False
     txtMember10.Visible = False
 Case Is = 2
     txtMember01.Visible = True
     txtMember02.Visible = True
     txtMember03.Visible = False
     txtMember04.Visible = False
     txtMember05.Visible = False
     txtMember06.Visible = False
     txtMember07.Visible = False
     txtMember08.Visible = False
     txtMember09.Visible = False
     txtMember10.Visible = False
 Case Is = 3
     txtMember01.Visible = True
     txtMember02.Visible = True
     txtMember03.Visible = True
     txtMember04.Visible = False
     txtMember05.Visible = False
     txtMember06.Visible = False
     txtMember07.Visible = False
     txtMember08.Visible = False
     txtMember09.Visible = False
     txtMember10.Visible = False
 Exit Sub
 End Select
 End Sub

     'Using Loop
     Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     Dim rStartAS As Long
     Dim rEndAS As Long

     rEndAS = CLng(txtNoMember.Value)
     For rStartAS = 1 To rEndAS
         Controls("txtMember" & Format(rStartAS, "00")).Visible = True
     Next
     End Sub
هل كانت مفيدة؟

المحلول

Try this

Dim Ctrl As Control
Dim CtrlNum As Long

For Each Ctrl In Me.Controls
    If Ctrl.Name Like "txtMember##" Then
        CtrlNum = CLng(Right$(Ctrl.Name, 2))
        Ctrl.Visible = txtNoMember.Value >= CtrlNum
    End If
Next
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top