Loops 使用True和False选择要打印的项目

Loops 使用True和False选择要打印的项目,loops,excel,checkbox,vba,Loops,Excel,Checkbox,Vba,我有一个工作簿,其中包含需要打印到excel中单独工作表的信息行。我试图利用一个复选框来指示哪些项目需要打印,哪些项目需要跳过。复选框位于列“A”中,一旦选中并运行宏,我希望它拾取特定行的每个单元格中的数据,将其传输到单独的工作表(表单),提示并将工作表保存到pdf,清除表单,然后返回主工作表继续,直到选中所有行。然而,现在,我的代码只是循环执行第一个“TRUE”语句,而不是继续执行其余语句。代码如下: Private Sub CommandButton1_Click() On Err

我有一个工作簿,其中包含需要打印到excel中单独工作表的信息行。我试图利用一个复选框来指示哪些项目需要打印,哪些项目需要跳过。复选框位于列“A”中,一旦选中并运行宏,我希望它拾取特定行的每个单元格中的数据,将其传输到单独的工作表(表单),提示并将工作表保存到pdf,清除表单,然后返回主工作表继续,直到选中所有行。然而,现在,我的代码只是循环执行第一个“TRUE”语句,而不是继续执行其余语句。代码如下:

Private Sub CommandButton1_Click()

    On Error GoTo ErrHandler:

    Dim i As Integer
    For i = 1 To 10
        If ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = False Then
        Else
            If ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = True Then
                Call PrintWO
            Else
            End If
            Do Until ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = 10
                MsgBox "Nothing Selected to Print"
                Exit Do
                Exit Sub
            Loop
        End If
    Next i
    ErrHandler:
End Sub

不知道你为什么会被两张反对票击败,但还是

你的问题是双重的。第一:

Do Until ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = 10
您永远不能有一个=10的复选框值;它可以是True、False或null,而不是整数。因此,Do循环永远不会结束,因为复选框永远不能是该值

我认为您实际上想要的是一个布尔标志来跟踪是否对PrintWO进行了任何调用(如果执行了该块,则将其设置为True),如果没有,则在For块完成后显示该消息


其次,很少应该有一个什么都不做的错误处理程序。它至少应该显示错误发生的原因。我最初的想法是,您的代码会在上面引用的行上抛出错误;显然不会,但在结束之前也不会,这意味着我可以想象,要么你结束了进程,要么它崩溃。

如果你否决了投票,请留下一条评论,让提问者可以从你应该通过代码调试的任何错误中吸取教训。插入一些换行符并逐行检查每一行,然后一旦看到您的代码正在做什么,您可以问自己“为什么我的代码以这种方式运行”,并识别每一行中的错误。