-2

我有一个工作簿,其中包含需要打印到 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
4

1 回答 1

2

不知道为什么你会被两票否决,但仍然......

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

Do Until ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = 10

你永远不能有一个复选框值 which = 10; 它将是 True、False 或 null,而不是整数。因此,Do 循环永远不会结束,因为复选框永远不会是那个值。

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

其次,你很少应该有一个什么都不做的错误处理程序。它至少应该显示什么错误。我最初的想法是您的代码会在上面引用的行上引发错误;显然它不会,但也不会直到结束,这意味着我想你要么最终杀死进程,要么它崩溃。

于 2012-10-17T17:28:23.963 回答