我正在尝试获取一个Excel工作簿,以根据某些单元格参数打印出Y页数的X份副本。我有“工作”代码,但是它将向打印机发送太多打印命令,所以我要尝试的是让它选择每个适用的工作表,然后仅发送一个批处理打印命令。
我尝试选择页面并将它们存储在数组中,但是运气不佳,所以我决定使用以下代码。注释中的代码是我从工作代码中更改的内容。每次我进行编译时,都会出现“ 编译错误:如果没有阻止,则结束> ”错误。我还添加了一条注释,其中调试器最终突出显示并抛出了编译错误。我查看了缩进,验证了“ If”和“ End If”的数量,确保我的代码中没有一行“ If ... THen ...”语句,并整理了论坛以查找相关内容。我发现所有接近的内容最终都无法解决这个问题。
我正在寻找有关此代码的指导和意见。我包括整个代码减去变量分配。我从来没有发布过Stack,因为我总是能够根据其他发布来弄清楚我需要什么,但是我还是把它扔了。任何帮助,将不胜感激!我希望这只是我自己的愚蠢错误,而不是严重错误。
Application.ScreenUpdating = False
If Not IsEmpty(copies) Then
For j = 1 To copies
If vShts = "0" Then
Sheets("BLANK ORDER").PrintOut
Else
'####Beginning of changed code####
With ActiveWorkbook
ThisWorkbook.Sheets("GO BACK PAGE 1").Select
If vShts > 1 Then
For lShCnt = 2 To vShts
ThisWorkbook.Sheets("GO BACK PAGE " & lShCnt).Select False
Next lShCnt
End If
With ActiveWorkbook
ActiveSheet.Range("A1:S39").Select
Selection.PrintOut preview:=True
End With
ThisWorkbook.Sheets(Sheet1.Name).Select
'####End of changed code####
End If '<- This "End If" is where the Debugger highlights it hanging up on
Next j
Else
If vShts = "0" Then
Sheets("BLANK ORDER").PrintOut
Else
With ActiveWorkbook
For i = 1 To vShts
Sheets("GO BACK PAGE " & i).PrintOut
Next i
End With
End If
End If
ThisWorkbook.Sheets(Sheet1.Name).Select
Application.ScreenUpdating = True
答案 0 :(得分:0)
这是许多初学者一天或一天碰到的常见问题,除了不是那么具有建设性的“好吧,只要正确遵循语言语法!”,实际上就有避免这种问题的真正方法。
最容易使用的是 indentation -或者更确切地说,是 consistency 。
问题从这里开始:
If vShts = "0" Then
Sheets("BLANK ORDER").PrintOut
Else
'####Beginning of changed code####
With ActiveWorkbook
缩进应该在此处增加:
If vShts = "0" Then
Sheets("BLANK ORDER").PrintOut
Else
'####Beginning of changed code####
With ActiveWorkbook
If...End If
块-或任何块的简单正确配对的关键实际上是一致的缩进。
每当看到不缩进下一行代码的“ block opener”时,您都可以期望出现此问题。像这样的With
块,它永远不会终止,并且会导致您得到编译错误-因为编译器到达End If
但期望End With
:
With ActiveWorkbook
ThisWorkbook.Sheets("GO BACK PAGE 1").Select
...
End If
另一种技术很难付诸实践,但是从长远来看,当真正开始命名事物并构建脚本和程序时,它确实会有所收获。
做很多事情的大型过程要“正确”比实际需要的要难得多。使大型过程更易于管理的一种方法是将其拆分为较小的过程,以减少工作量。所以代替这个:
If condition Then
'do stuff
'do more stuff
'some more stuff
Else
'do other stuff
End If
您可以将条件分支的内容放入其自己的更小,更专门的过程中:
If condition Then
DoStuff
Else
DoOtherStuff
End If
您可以通过在宏/过程之外引入新的Sub
语句来做到这一点:
Private Sub DoStuff()
'do stuff
'do more stuff
'some more stuff
End Sub
Private Sub DoOtherStuff()
'do other stuff
End Sub
然后,您可以在过程之间传递 parameters ,然后使用Function
过程来评估这些参数并相应地返回一个值,一旦掌握了这些构建基块,一切就会变得非常有趣。 。继续前进!