【发布时间】:2016-05-18 13:53:36
【问题描述】:
我有一个 Excel 工作簿,其中几乎所有内容都是自动化的。它打开其他工作簿,从中复制数据,关闭它们,然后多次循环数据以生成我们打印和使用的报告。几乎每次运行所有 VBA 然后尝试打印后,打印预览都会卡住,要么找到打印机,要么加载图片中的页面大小。关闭 Excel 并重新打开文档会将打印预览恢复为正常功能。 VBA 所做的唯一与打印相关的事情就是更改打印区域。我对运行 VBA 的任何其他文档都没有这个问题。这只是一个错误还是代码中的某些东西?
这是导致打印预览无法以某种方式加载的代码。如果我跳过本节,那么它会按预期工作......我希望以某种方式让这个代码发挥作用,因为它仍然需要。
Set wb1 = Workbooks.Open(FileName)
Set wb2 = ThisWorkbook
For i = LBound(sArray) To UBound(sArray) 'Loops through array, copies available data from last report
ShtName = sArray(i, 0)
On Error Resume Next
wb1.Sheets(ShtName).Activate
If Err.Number = 0 Then
wb1.Sheets(ShtName).Activate
Columns("A:U").Copy
wb2.Sheets(ShtName).Activate
Columns("BE:BV").Select
Selection.PasteSpecial xlPasteValues
Application.CutCopyMode = False
lastrow = Cells(Rows.Count, "BE").End(xlUp).Row
Range("BA2:BC2").Select
Selection.AutoFill Destination:=Range(Cells(2, "BA"), Cells(lastrow, "BC")), Type:=xlFillDefault
End If
On Error GoTo 0
DoEvents
Next i
wb1.Close False
Sheet2.Activate
我尝试注释掉“On Error Resume Next”、“On Error Goto 0”、“If...”、“End If”和“DoEvents”。打印预览仍然失败,删除了那些,只是从上一张表中复制和粘贴。
【问题讨论】:
-
如果您正在寻找解决方案,您需要提供一些附加信息。代码是什么?如果您不运行代码的打印区域部分会发生什么?它发生在每台机器上吗?不同版本的excel呢?
-
你能把你的代码贴出来让我们看看发生了什么吗?工作簿的打开或丢失可能存在问题。您可以尝试设置 activePrinter 或 paperSize 类似
ActiveWorkbook.Sheets("Name").PageSetup.PaperSize = xlPaperLegal -
也许您可以在运行 VBA 之后在工作簿和工作表级别检查名称集合。如果您发现有多个 Print_Area 名称或任何其他奇怪的 Name 条目,那么这可能是您的罪魁祸首。赠品是通过重新启动 Excel 消除了问题,这表明您在此过程中迭代的工作簿中的名称正在污染您在具有打印预览问题的主工作簿中的名称集合。
-
导致问题的行是
Selection.AutoFill Destination:=Range(Cells(2, "BA"), Cells(lastrow, "BC")), Type:=xlFillDefault -
好的,似乎任何放入“BC”列的公式都会阻止打印预览工作,并导致我在关闭工作簿时收到消息“Microsoft Excel 已停止工作”。我尝试将该公式移至“BB”,删除代码中对该公式的所有进一步引用,但似乎没有任何效果。我也尝试将工作簿重建为新的。更糟糕的是,如果我单步执行每个子程序,则打印预览工作正常,但如果我只是不间断地运行它,那么它就不会。认为是时候放弃这个问题了……