MouseMove在Userform上,使用循环

时间:2013-12-04 06:23:58

标签: excel vba userform

用户将首先输入成员数。如果用户输入1个成员,则只显示1个文本框供用户输入。如果用户输入10个成员,则将显示所有10个文本框。它适用于If Else,但这对我来说是十分繁琐的。我不知道如何将它从If Else更改为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

1 个答案:

答案 0 :(得分:0)

试试这个

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