LoginSignup
5
11

More than 3 years have passed since last update.

Excel VBA PasteSpecial で出るエラーの回避方法

Last updated at Posted at 2020-04-05

事の発端

ExcelからWordにグラフをコピーしたかった。(1回だけではなく50回くらい色んなグラフをコピー処理をする)
PasteSpecialでコピーは出来るが、数回に一回はエラーがでることが分かった。
さて、どうしよう・・・。

環境

Windows 10
Excel 2019
Word 2019

自己評価

ExcelからWordにグラフを貼り付けるマクロを使う場合は、このページのサンプルコード参考にした方が絶対にいいです。

PasteSpecial で出るエラーについて

PasteSpecialとは、クリップボードにコピーされた情報をペーストする関数です。
webで検索すると、DoEventを使えば、エラーが回避されるという情報もあります。

DoEvents
Sleep 75
DoEvents

上のようにすれば解決するとWebでは出てきますが、自分は解決しませんでした。

自分が考えた解決方法

・Excelに「Sheet1」という名前のWorksheetを作り、その中に「1」という名前のグラフを作っているものとした上で、以下のマクロを動作させます。

Sub main()
    Dim wsh As Worksheet
    Set wsh = ThisWorkbook.Worksheets("Sheet1")

    '参照設定で、Microsoft Word 16.0 Object Libraryにチェックを入れる
    Dim wdApp As Word.Application
    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = True
    wdApp.Activate

    Dim wdDoc As Word.Document
    Set wdDoc = wdApp.Documents.Add
    wdApp.Selection.TypeParagraph

    Dim count As Long
    count = 0

    Dim i As Long
    For i = 0 To 100
        Call myCopy(wdApp, wsh.ChartObjects("1"))
    Next
    MsgBox "正常に処理を完了しました。"
End Sub

Sub myCopy(wdApp As Word.Application, obj As Variant)
    Dim msg As String
    Dim count As Long
    count = 0
    On Error GoTo myError
    obj.Copy
    wdApp.Selection.PasteSpecial Placement:=wdInLine, DataType:=wdPasteMetafilePicture
    wdApp.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
    Exit Sub
myError:
    count = count + 1
    Sleep 100
    DoEvents
    If count = 10 Then
        msg = "回数:" & count & vbCrLf
        msg = "エラー番号:" & Err.Number & vbCrLf
        msg = msg & "エラーの種類:" & Err.Description
        MsgBox msg, vbExclamation
        End
    End If
    Resume
End Sub

・これで何度実行してもエラーは出ません。自分以外の環境でもエラーは出ないと思います。
・PasteSpecialでエラーが出ても、出来るまで繰り返せばいいんじゃないか?という強引な発想でしたが、これが正しい解決方法だと思います。Resume Nextで回避するのではなく、Resumeで繰り返しトライしています。
・myCopyの中の処理が重要です。参考にしてください。
・Web上のどこにもこのような解決方法は書かれていないので、このエラーで悩んだ人は、たくさんいただろうなと思います。

5
11
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
11