【问题标题】:Paste charts from Excel to Word error - The Remote Server Machine does not exist (Error 462)将图表从 Excel 粘贴到 Word 错误 - 远程服务器计算机不存在(错误 462)
【发布时间】:2015-06-28 07:30:48
【问题描述】:

我有一个宏,它在 excel 中的 VBA 中执行以下逻辑:

  1. 打开一个word文档

  2. 遍历文档中所有预设的书签

  3. 找到书签后,循环遍历特定工作表中的所有图表对象,当图表名称与书签名称匹配时,将其复制到单词 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,因为您的文档将被修改

标签: vba excel ms-word


【解决方案1】:

添加 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

【讨论】:

  • 您可以验证您的答案,如果您有足够的声誉,您可以将您的答案作为社区 wiki 打开,以便其他人可以改进(您会知道是否有待处理的编辑提议)很高兴我能帮上忙;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多