PDF生成期间的运行时错误-2147467259

时间:2013-07-17 14:08:36

标签: pdf-generation runtime-error word-vba word-2007

我是使用VBscript的新手,我不明白为什么我总是得到错误代码-2147467259(“-2147467259:此文件正由另一个应用程序或其他用户使用”)(这是我自己的翻译,因为错误消息是德语)。我试图通过VBscript从MS Word 2007中的序列号生成PDF文件。从.docx文件生成超过28.000个PDF文件。也许可能是这个伟大的数字可能是脚本失败的原因,但我不希望如此;)。

这是我正在使用的VB代码:

Sub PDFErstellung()
    Dim sBrief As String
    Dim sVertreterVerzeichnis As String
    Dim sAusgabepfad As String
    Dim iAnzahl As Integer
    Dim sKundenName As String
    Dim sError As String
    Dim iModulo As Integer

    Application.Visible = False
    sAusgabepfad = "C:\temp\"

    On Error GoTo Fehler

    With ActiveDocument.MailMerge
        .DataSource.ActiveRecord = wdLastRecord
        iAnzahl = .DataSource.ActiveRecord
        .DataSource.ActiveRecord = wdFirstRecord
        Do
            .Destination = wdSendToNewDocument
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = .ActiveRecord
                .LastRecord = .ActiveRecord
                sVertreterVerzeichnis = sAusgabepfad & .DataFields("VertreterNr").Value
                If Not IsDiskFolder(sVertreterVerzeichnis) Then
                    MkDir sVertreterVerzeichnis
                End If
                sKundenName = CleanFilename(Left(.DataFields("KundenName").Value, 20), "")
                sBrief = sVertreterVerzeichnis & "\" & .DataFields("VertreterNr").Value & "_" & _
                            .DataFields("KundenNr").Value & "_" & sKundenName & ".pdf"
            End With
            .Execute Pause:=False
            ActiveDocument.ExportAsFixedFormat OutputFileName:=sBrief _
                , ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
                wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
                Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
                CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
                BitmapMissingFonts:=True, UseISO19005_1:=False            

            If InStr(1, ActiveWindow.Caption, "Serien") = 1 Then
                ActiveWindow.Close False
            End If

            If .DataSource.ActiveRecord < iAnzahl Then
                .DataSource.ActiveRecord = wdNextRecord
            Else
                Exit Do
            End If
        Loop
    End With
    Application.Quit savechanges:=wdDoNotSaveChanges     
End Sub

我能理解的是,脚本在不同时间使用不同数量的已创建PDF文件中止。有时它会在大约800个文件之后停止,有时会在~7000之后停止,依此类推。感觉它曾经工作过一次!记住,我正在尝试生成28.000个文件。

此外,我不得不说Word正在使用从数据库导出的.csv文件(7 MB)。

我能做些什么吗?

我注意到,如果我关闭'ActiveWindow',我可以创建比不关闭此窗口更多的PDF文件。没有关闭,生成的PDF文件数量有限(我必须再次测试它,因为我不记得这个数字 - 大概是2.000?!)。

在最后一次尝试中,我实现了一个睡眠方法,我在'ActiveWindow.Close False'之后执行了该方法。在第一次它似乎有所帮助,但在三次之后只有一点改进来确定......

有人有想法吗?

(我希望我的英语不是太糟糕,因为那个人无法理解......)

2 个答案:

答案 0 :(得分:1)

我会把任务分成:

  1. 生成27.000 .doc(x)字母(后备:分批说1.000;如果Word不能这样做,你将对盖茨先生提出有效的索赔)
  2. 将27.000 .doc(x)字母转换为.pdf(后备:使用专门工具代替Word)
  3. 这些子任务的代码可以从您现有的循环中导出(使其不那么复杂);附加条件 - 如果目标文件存在则不处理 - 不应该太难。如果您分批工作,则每个步骤后至少完成一部分工作。

答案 1 :(得分:1)

我找到了脚本出现这些问题的原因:防病毒扫描程序阻止了'ActiveWindows'的关闭。这是有道理的,因为错误发生相应不规则。现在脚本可以处理所有28.000个字母!

就是这样!