参考For Next循环中当前项的标题

时间:2017-12-12 18:56:43

标签: vba

自学成才的VBA新手在这里。我正在处理用户表单,用户可以在其中选择复选框,并且需要将这些复选框的标题编译到单个单元格中(请参阅here)。以前,我只是在表单上的每个复选框都有一个If语句(所有13个),但它变得非常笨拙,我正在尝试清理它。

到目前为止,我有一个For Next循环,它遍历所有表单控件以查找复选框并查看是否已选中它们。 接下来我想在循环中引用当前ctrl的标题,但没有ctrl.Caption属性。我尝试通过使用当前currentcb的名称填充变量ctrl来解决此问题,但短语currentcb.Caption也返回了无效限定符错误。

更新:我稍微更改了代码 - @ YowE3K是正确的ctrl.Caption是有效属性,但现在我得到运行时错误1004:应用程序定义或对象 - 定义的错误。调试器突出显示以ws.Cells(lrow, 7).Value开头的行。有任何想法吗?新代码在下面更新。

For Each ctrl In Me.Controls
    If TypeName(ctrl) = "CheckBox" Then
        If ctrl.Value = True Then
            ws.Cells(lrow, 7).Value = ws.Cells(lrow, 7) & vbCrLf & "|" & ctrl.Caption   'error thrown here
        End If
    End If
Next ctrl

此方案是否有解决方法?

1 个答案:

答案 0 :(得分:0)

@YowE3K是对的 - ctrl.Caption确实存在。错误1004只是来自我在调试过程中所做的一些跳跃。最终的清理代码如下:

For Each ctrl In Me.Controls
    If TypeName(ctrl) = "CheckBox" Then
        If ctrl.Value = True Then
            ws.Cells(lrow, 7).Value = ws.Cells(lrow, 7) & vbCrLf & "|" & ctrl.Caption
        End If
    End If
Next ctrl