在stack上一些用户的帮助下,我编译了一个宏,该宏从excel工作簿中提取某些值,并将它们复制到word模板中。该宏有时工作正常,但在其他情况下,我得到一个错误-“运行时错误-2146950355(80080005):服务器执行失败”。我不知道为什么我有时会得到这个错误,但不是其他人。附件是我的代码和屏幕截图的错误和调试。
Const FilesPath As String = "filespath"
Const FilesPathh As String = "filespathh"
Const FilesPathhh As String = "filespathhh"
Const TemplateFile As String = "tempa.docx"
Sub Letters()
Dim wd As Word.Application, doc As Word.Document
Dim NomCell As Range, ws As Worksheet
Dim Result As Integer
Set ws = ActiveSheet
Set wd = New Word.Application
wd.Visible = True
Columns("H:H").Select
Application.CutCopyMode = False
Selection.Copy
Columns("I:I").Select
Selection.Insert Shift:=xlToRight
Application.CutCopyMode = False
Columns("I:I").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("J:J").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("H:H").Select
Selection.TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=True, Other:=False, FieldInfo:= _
Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Range("H1").Select
ActiveCell.FormulaR1C1 = "Last Name"
Range("I1").Select
ActiveCell.FormulaR1C1 = "First Name"
Range("J1").Select
ActiveCell.FormulaR1C1 = "Other"
For Each NomCell In ws.Range("A2", ws.Cells(Rows.Count, 1).End(xlUp)).Cells
'open as read-only
Set doc = wd.Documents.Open(FilesPath & TemplateFile, ReadOnly:=True)
With NomCell.EntireRow
doc.Bookmarks("date").Range.Text = Date
doc.Bookmarks("name").Range.Text = .Columns("I").Value
doc.Bookmarks("course").Range.Text = .Columns("A").Value
.Columns("A").Select
Selection.Replace What:="&", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Selection.Replace What:=":", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Selection.Replace What:="/", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
doc.SaveAs2 FilesPathh & .Columns("K").Value & " " & .Columns("A").Value & ".pdf", _
wdExportFormatPDF
doc.Close False
End With
Next NomCell
wd.Quit
ActiveSheet.Cells.ClearContents
Result = MsgBox("The letters have been created. Would you like to view them?", vbYesNo)
If Result = vbYes Then
Call Shell("explorer.exe " & FilesPathhh, vbNormalFocus)
End If
End Sub
任何帮助都将不胜感激。谢谢!
2条答案
按热度按时间k3fezbri1#
运行时错误-2146950355(80080005):服务器执行失败
您可能会发现与Error when you start many COM+ applications: Error code 80080005 -- server execution failed文章中描述的完全相同的错误。
Considerations for server-side Automation of Office文章声明如下:
Microsoft Office的所有当前版本都是为在客户端工作站上作为最终用户产品运行而设计、测试和配置的。它们采用交互式桌面和用户配置文件。它们不提供满足设计为无人参与运行的服务器端组件的需要所必需的可重入性或安全性级别。
Microsoft当前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)自动执行Microsoft Office应用程序,因为在此环境中运行Office时,Office可能会表现出不稳定的行为和/或死锁。
如果要生成在服务器端上下文中运行的解决方案,则应尝试使用对于无人参与的执行来说是安全的组件。或者,应尝试找到至少允许部分代码在客户端运行的替代方案。如果从服务器端解决方案使用Office应用程序,则该应用程序将缺少成功运行所需的许多功能。此外,您将冒整个解决方案稳定性的风险。
如果只处理开放XML文档,请考虑使用Open XML SDK,否则,可以考虑使用任何为服务器端执行而设计的第三方组件,例如Assose。
jv4diomz2#
我遇到了同样的问题,当我试图创建Word应用程序对象时,Word已经在运行,总是会出现这个问题。我通过尝试引用已经在运行的Word示例来解决这个问题。只有当这个示例不可用时,我才会创建一个新示例。
请注意,我在代码中使用了后期绑定: