【问题标题】:MouseMove on Userform, using loops用户窗体上的 MouseMove,使用循环
【发布时间】:2013-12-20 12:47:56
【问题描述】:

用户将首先输入成员数量。如果用户输入 1 个成员,则只会出现 1 个文本框供用户输入。如果用户输入 10 个成员,则将显示所有 10 个文本框。它适用于 If Else,但对我来说做 10 次很乏味。我不知道如何将它从 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

【问题讨论】:

    标签: excel vba userform


    【解决方案1】:

    试试这个

    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
    

    【讨论】:

    • 您好,谢谢您的回答,但它不起作用。由于它不检查 txtNoMember.Value,所以当鼠标移动时它会更改所有 Visible = True。
    • 经过测试,当txtNoMember 包含数字时它确实有效。将CtrlNum = CLng(Right$(Ctrl.Name, 2)) 换行,看看CtrlNum 的价值是多少。它的计算结果可能为0,在这种情况下,您需要查看txtNoMember 的值。和往常一样:为无效用户条目添加一些错误处理
    • 谢谢,它现在可以工作了 :) 对于 Right$,它的用途是什么?
    • 从控件名称字符串的右端获取两个字符。在这种情况下,txtMember 号码。 CLng 然后将其转换为 Long 即将字符串转换为数字
    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 2019-06-12
    • 2015-07-11
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多