【问题标题】:How to dynamically add Checkbox-Buttons to userform in VBA如何在 VBA 中将复选框按钮动态添加到用户窗体
【发布时间】:2016-05-23 21:44:57
【问题描述】:

我有一个带有 5 个复选框按钮的用户表单,用于 5 个 pdf 版本。 好吧,当用户调用用户表单时,用户表单会初始化 5 个复选框按钮以选择其中一个。目前,代码非常静态,不太好。

这里是例子:

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

有人知道我该如何解决这个问题吗?

【问题讨论】:

    标签: vba excel for-loop checkbox


    【解决方案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
    

    【讨论】:

    • 当复选框未在用户表单中预定义时是什么?如何将复选框添加到用户表单?
    • 使用控件集合的Add方法。
    • 你的意思只是定义With frmOne.Controls.Add("Version" & i)...
    • 当我这样做时,我收到运行时错误:'-2147221005 (800401f3)' invalid class string
    • 使用LeftTopHeightWidth属性。
    【解决方案2】:

    如下:

    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
    

    【讨论】:

    • 看看下面的评论!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2017-11-30
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多