【发布时间】:2015-06-28 07:30:48
【问题描述】:
我有一个宏,它在 excel 中的 VBA 中执行以下逻辑:
打开一个word文档
遍历文档中所有预设的书签
找到书签后,循环遍历特定工作表中的所有图表对象,当图表名称与书签名称匹配时,将其复制到单词 doc 中
我在第二次运行宏时遇到了错误 462。我意识到这与没有正确引用对象有关,但我似乎无法找到罪魁祸首。
我的代码如下所示:
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
我的 copyGraphs 看起来像:
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 Sub 与调用它的 sub 在同一个模块中。
【问题讨论】:
-
您是否尝试在重新启动之前关闭您的 Word 文档?因为如果它们仍然在另一个 Word 实例中打开,我不确定您是否能够正常打开它们...
-
您好,是的,我已尝试关闭整个 excel 文件并重新打开。同样的问题仍在过滤。
-
不,我的意思是您的 Word 文档,因为您没有在代码中关闭它们,如果它们已经打开,则可能是它无法正常工作的原因。在
Sub copyGraphs末尾添加wdDoc.Close并尝试一下;) -
抱歉造成的混乱,是的,在抛出错误后我将关闭所有内容。对于它的价值,在第二次运行时,在 wdApp.Selection.PasteSpecial DataType:=wdPasteEnhancedMetafile 处引发 462 错误。图表被粘贴到文档中,然后崩溃。
-
Mkay...我猜你的意思是在错误之前,因为如果你在错误之后手动关闭它,没有意义...你有没有尝试使用@ 987654327@ 在
wdDoc而不是wdApp?并在copyGraphs的每个参数中添加ByVal,因为您的文档将被修改