导出多个PDF时出现内存错误

时间:2018-02-14 19:06:52

标签: excel vba excel-vba pdf

我有一个宏,它通过从工作簿中的工作表导出一系列单元格来生成数百个PDF。程序的工作方式是程序在工作表上更改几个值,公式然后填充单元格,然后将工作表导出为PDF。程序生成大约150个pdf后,Excel崩溃并显示

  

内存错误,例如“没有足够的资源来完成操作”

如果我注释掉导出pdf的代码行,我可以一遍又一遍地运行程序而没有任何问题。如果我将导出的文件类型更改为excel工作簿,我也可以运行该程序没有问题。这是我用来导出pdfs的打印功能。

Function Prnt(print_area As Range)

Dim myDir As String, mySht As String
Dim supplier As String
DoEvents
supplier = Range("F4").Value
myDir = Range("y2").Value
mySht = Range("y1").Value
mySht = RemoveSpecialChars(mySht)
On Error Resume Next
MkDir myDir
On Error Resume Next
myDir = myDir + "\" + Range("z1").Value
On Error Resume Next
MkDir myDir
On Error Resume Next
supplier = RemoveSpecialChars(supplier)
myDir = myDir & "\" & supplier
On Error Resume Next
MkDir myDir

print_area.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=myDir & "\" & mySht, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Set print_area = Nothing
Application.CutCopyMode = False
End Function

我注释掉或更改以防止错误的行是以“print_area.Exportas ...”开头的行。我的打印区域由几个链接的图像和包含公式的单元格组成。我注意到删除链接的图像导致程序在生成大约250个pdf后崩溃,这是一个小小的改进。我无法想象为什么错误正在发生,任何帮助将不胜感激。我真的需要这些文件是pdf格式,并且可以接受任何建议或替代方法来实现这一目标。

1 个答案:

答案 0 :(得分:0)

从打印区域中删除所有链接的图像可防止程序中断。似乎导出图像会导致一些内存泄漏。我已经成功生成了600个PDF而没有细分但我会一遍又一遍地运行程序,看看是否有其他东西可能导致泄漏。

通过在每次迭代中删除并重新创建打印区域中的每个图像,每50次迭代暂停我的程序,并在暂停后抛出DoEvents,现在问题已得到解决。关于为什么首先发生错误没有明确的答案。