Vba 将图表从Excel粘贴到Word错误-远程服务器计算机不存在(错误462)
我有一个宏,它在excel中的VBA中执行以下逻辑:Vba 将图表从Excel粘贴到Word错误-远程服务器计算机不存在(错误462),vba,excel,ms-word,Vba,Excel,Ms Word,我有一个宏,它在excel中的VBA中执行以下逻辑: 打开word文档 循环浏览文档中所有预设的书签 找到书签后,循环浏览特定工作表中的所有图表对象,当图表名称与书签名称匹配时,将其复制到word文档中 我在第二次运行宏时遇到错误462。我意识到这与没有正确引用对象有关,但我似乎找不到罪犯在哪里 我的代码如下所示: Sub buildDocument() '#### Initialise our variables Dim wdApp As Word.Application Dim wdD
Sub buildDocument()
'#### Initialise our variables
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim theWorksheet As Worksheet
Dim Chart As ChartObject
Dim wdBookmarksArray() As Variant
Dim counter1 As Integer
Dim counter2 As Integer
Dim noCharts As Integer
Dim counter4 As Integer
Dim PasteObect As Variant
Dim quarter As String
Dim sheetsArr As String
'#### Switch off update ####
Application.ScreenUpdating = False
'#### Create a new word doc; minimise; ####
Set wdApp = New Word.Application
With wdApp
.Visible = True
.WindowState = wdWindowStateMinimize
End With
On Error GoTo ErrorHandler
'#### Build a dialog box to find the
' correct word template file ####
Set wdDoc = wdApp.Documents.Open(openDialog())
counter2 = 1
counter3 = 1
For counter1 = 1 To wdDoc.Bookmarks.Count
'#### Export "New Issue Timing" graphs to
' word document ####
Call copyGraphs(newIssuesTiming, _
counter1, _
wdDoc, _
wdApp)
Next
ThisWorkbook.sheets(mainSheet).Select
Set wdApp = Nothing
Set wdDoc = Nothing
Exit Sub
错误退出:
wdDoc.Close
wdApp.Quit
Set wdApp = Nothing
Set wdDoc = Nothing
Exit Sub
错误处理程序:
Dim error_report As ErrorControl
Set error_report = New ErrorControl
error_report.SetErrorDetail = Err.Description
error_report.SetErrorNumber = Err.Number
error_report.SetErrorSection = "BUILD_WORD_DOC"
If error_report.GenerateErrorReport Then
Resume ErrorExit
End If
Set error_report = Nothing
我的复印机看起来像:
Sub copyGraphs(sheet As String, _
counter1 As Integer, _
wdDoc As Word.Document, _
wdApp As Word.Application)
Dim wdBookmarksArray() As Variant
Dim counter2 As Integer
Dim Chart As ChartObject
Dim theWorksheet As Worksheet
Dim noCharts As Integer
Dim counter4 As Integer
Dim PasteObect As Variant
Dim quarter As String
Dim sheetsArr As String
For Each Chart In ThisWorkbook.sheets(sheet).ChartObjects
If wdDoc.Bookmarks(counter1).name = Chart.name Then
ThisWorkbook.sheets(sheet).ChartObjects(Chart.name).Copy
wdApp.Selection.Goto What:=wdGoToBookmark, name:=wdDoc.Bookmarks(counter1).name
wdApp.Selection.PasteSpecial DataType:=wdPasteEnhancedMetafile
End If
Next
End Sub
copyGraph子模块与调用它的子模块位于同一个模块中。添加ByVal确实有效,但需要关闭并重新打开excel工作表才能从内存中清除所有对象 答案来自@R3uK 以下代码有效:
Sub buildDocument()
'#### Initialise our variables
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim theWorksheet As Worksheet
Dim Chart As ChartObject
Dim wdBookmarksArray() As Variant
Dim counter1 As Integer
Dim counter2 As Integer
Dim noCharts As Integer
Dim counter4 As Integer
Dim PasteObect As Variant
Dim quarter As String
Dim sheetsArr As String
'#### Switch off update ####
Application.ScreenUpdating = False
'#### Create a new word doc; minimise; ####
Set wdApp = New Word.Application
With wdApp
.Visible = True
.WindowState = wdWindowStateMinimize
End With
On Error GoTo ErrorHandler
'#### Build a dialog box to find the
' correct word template file ####
Set wdDoc = wdApp.Documents.Open(openDialog())
counter2 = 1
counter3 = 1
For counter1 = 1 To wdDoc.Bookmarks.Count
'#### Export "New Issue Timing" graphs to
' word document ####
Call copyGraphs(newIssuesTiming, _
counter1, _
wdDoc, _
wdApp)
Next
ThisWorkbook.sheets(mainSheet).Select
wdDoc.Save
wdDoc.Close
wdApp.Quit
Set wdApp = Nothing
Set wdDoc = Nothing
Exit Sub
ErrorExit:
wdDoc.Close
wdApp.Quit
Set wdApp = Nothing
Set wdDoc = Nothing
Exit Sub
ErrorHandler:
Dim error_report As ErrorControl
Set error_report = New ErrorControl
error_report.SetErrorDetail = Err.Description
error_report.SetErrorNumber = Err.Number
error_report.SetErrorSection = "BUILD_WORD_DOC"
If error_report.GenerateErrorReport Then
Resume ErrorExit
End If
Set error_report = Nothing
End Sub
复制图形的例程:
Sub copyGraphs(ByVal sheet As String, _
ByVal counter1 As Integer, _
ByVal wdDoc As Word.Document, _
ByVal wdApp As Word.Application)
Dim wdBookmarksArray() As Variant
Dim counter2 As Integer
Dim Chart As ChartObject
Dim theWorksheet As Worksheet
Dim noCharts As Integer
Dim counter4 As Integer
Dim PasteObect As Variant
Dim quarter As String
Dim sheetsArr As String
For Each Chart In ThisWorkbook.sheets(sheet).ChartObjects
If wdDoc.Bookmarks(counter1).name = Chart.name Then
ThisWorkbook.sheets(sheet).ChartObjects(Chart.name).Copy
ThisWorkbook.sheets(sheet).ChartObjects(Chart.name).Copy
wdApp.Selection.Goto What:=wdGoToBookmark, name:=wdDoc.Bookmarks(counter1).name
wdApp.Selection.PasteSpecial DataType:=wdPasteEnhancedMetafile
End If
Next
End Sub
在重新启动之前,您是否尝试关闭Word文档?因为如果它们仍然在另一个Word实例中打开,我不确定您是否能够正常打开它们…您好,是的,我已尝试关闭整个excel文件并重新打开。同样的问题还在被过滤。不,我指的是你的Word文档,因为你没有在代码中关闭它们,如果它们已经打开,这可能是它无法工作的原因。添加
wdDoc。在子复制图的末尾关闭,然后重试;)抱歉造成混乱,是的,我在抛出错误后关闭所有内容。值得一提的是,在第二次运行时,在wdApp.Selection.PasteSpecial DataType:=wdPasteEnhancedMetafile处抛出了462错误。图表被粘贴到文档中,然后崩溃。Mkay。。。我猜你的意思是在出错之前,因为如果你在出错之后手动关闭它,那就没有意义了。。。您是否尝试在wdDoc
上而不是在wdApp
上使用Selection
?并在copyGraphs
的每个参数中添加一个ByVal
,因为您的文档将被修改。您可能能够验证您的答案,如果您有足够的声誉,您可以将您的答案作为社区wiki打开,以便其他人可以对其进行改进(您将知道是否有待定的编辑建议)。很高兴我能提供帮助;)