我是使用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'之后执行了该方法。在第一次它似乎有所帮助,但在三次之后只有一点改进来确定......
有人有想法吗?
(我希望我的英语不是太糟糕,因为那个人无法理解......)
答案 0 :(得分:1)
我会把任务分成:
这些子任务的代码可以从您现有的循环中导出(使其不那么复杂);附加条件 - 如果目标文件存在则不处理 - 不应该太难。如果您分批工作,则每个步骤后至少完成一部分工作。
答案 1 :(得分:1)
我找到了脚本出现这些问题的原因:防病毒扫描程序阻止了'ActiveWindows'的关闭。这是有道理的,因为错误发生相应不规则。现在脚本可以处理所有28.000个字母!
就是这样!