我有一个工作簿,其中包含需要打印到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
答案 0 :(得分:2)
不确定为什么你会受到两张选票的打击,但仍然......
你的问题是双重的。第一:
Do Until ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = 10
你永远不会有一个复选框值= 10;它将是True,False或null,而不是整数。因此,Do循环永远不会结束,因为复选框永远不会是那个值。
我认为你真正想要的是一个布尔标志来跟踪是否对PrintWO进行了任何调用(如果执行了该块,则将其设置为True),如果没有,则在你的For块完成后显示该消息。
其次,你很少有一个什么都不做的错误处理程序。它应该至少显示错误。我原来的想法是你的代码会在上面引用的行上引发错误;显然它不会,但也不会这样做直到结束,这意味着我想象你最终会杀死这个过程或者它会崩溃。