Excel VBA打印冻结

我已经尝试了大量的解决scheme,并且现在浏览了几个小时的networking。 也许你们中的一个人可以帮忙。

我有一个macrosselect所有工作表的名称中的特定string,然后打印出来。 如果表单太多,会冻结,并且无法打开macros进行debugging,而Ctrl + Alt + Del是唯一的出路。 它也冻结在不同的地方,每次…

我的原始代码:

Application.ScreenUpdating = False Application.EnableEvents = False Dim x As Integer For x = 1 To Worksheets.count If VBA.InStr(Worksheets(x).Name, "Lateral Assessment") > 0 Then With Worksheets(x).PageSetup .Orientation = xlPortrait .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With Worksheets(x).PrintOut End If Next x Application.ScreenUpdating = True Application.EnableEvents = True 

我已经尝试过,其他论坛主题,如下:

  • 在循环中添加DoEvents以允许系统时间处理
  • 添加一个“等待”计时器给它时间来处理
  • 循环浏览并设置页面设​​置属性,然后打印(完成循环以设置页面设​​置正常,但在打印循环中冻结,如“普通”
  • 移动到将所有表单添加到数组中,然后将它们作为单个打印作业发送(它在14-16页之后仍冻结)

我也曾经在一个更大的stream程中添加了一个进度条,在冻结不一致的纸张数量之前,您可以看到它在进行计数。 此外,请注意,即使从VBA代码窗口一次运行一个迭代,也会出现问题,因此看起来与处理时间无关(尽pipe不能确定)。

我目前的代码:

 Application.ScreenUpdating = False Application.EnableEvents = False Dim x As Long, iTotal As Long, sSheets() As String iTotal = -1 For x = 1 To Worksheets.count If VBA.InStr(Worksheets(x).Name, "Lateral Assessment") > 0 Then With Worksheets(x).PageSetup .Orientation = xlPortrait .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With iTotal = iTotal + 1 ReDim Preserve sSheets(iTotal) sSheets(iTotal) = Worksheets(x).Name End If Next x If iTotal <> -1 Then Sheets(sSheets).PrintOut Copies:=1, Collate:=True End If Application.ScreenUpdating = True Application.EnableEvents = True 

任何想法为什么会发生这种情况,以及可能的解决办法,我没有尝试过?

确保ScreenUpdating已打开。 VBA代码是:Application.ScreenUpdating = True

如果它挂起,这工作。 调整printpreview窗口的大小(抓住angular落或边缘,然后再变小)。 这似乎导致Excel启动ScreenUpdating,并给你控制权。 为了以防万一,所以您总是可以访问窗口的边缘来执行此操作,您可以使用以下命令自动调整Excel在printpreview之前的大小:

 Sub WindowState_850x1400() With Application .WindowState = xlNormal .Top = 1 .Left = 1 .Height = 850 .Width = 1400 End With End Sub