2015-01-30 7 views
1

Word 2010 VBA에서 간단한 코드를 작성했습니다 (VBA의 새로운 기능). Excel에서 일부 테이블과 그래프를 가져 와서 Word에 붙여 넣기 만하면됩니다. OLEobjects로. Everythink는 코드가 Excel에서 Word로 차트를 붙여 넣으려고 할 때를 제외하고는 정상적으로 작동합니다. "오류 5342 - 지정된 데이터 형식을 사용할 수 없습니다."라는 메시지가 나타납니다. 코드의 마지막 부분에서 찾을 수 있습니다.PasteSpecial - 오류 5342 - 지정된 데이터 형식을 사용할 수 없습니다 (Word 2010 코드)

Sub Copy_Tables_and_Graphs_OLE() 

    '''' Variables Definition '''' 
    Dim pgmExcel As Excel.Application 
    Dim table As Word.table 
    Dim month As String 
    Dim year As String 
    Dim path As String 
    Dim monthyear As String 
    Dim year_1 As String 
    Dim monthyear_1 As String 
    Dim path_1 As String 
    Dim ultimate_path As String 
    Dim range As String 
    Dim sure As Integer 
    Dim same As Integer 
    Dim month_1 As String 
    Dim n As String 
    Dim Figure As String 
    Dim BookmarkArray As Variant 
    Dim i As Variant 
    Dim lenght As Integer 
    Dim chart As Object 
    Dim fso As Object 

    '''' Date Inputs '''' 
    year = InputBox("Please insert year - yyyy") 
    month = InputBox("Please insert month - mm") 
    monthyear = year & month 

    '''' Path Section '''' 
    path = "hiddenpath" & year & "\\" & monthyear & "hidden path.xlsx" 
    MsgBox ("Path Value is:" & path) 
    sure = MsgBox("Confirm? - answer yes or no", vbYesNo) 

    If sure = vbYes Then 
     path = "hidden path" & year & "\\" & monthyear & "hidden path.xlsx" 
     ultimate_path = path 
    Else 
     year_1 = InputBox("Then please insert the right - yyyy") 
     month_1 = InputBox("Then please insert the right - mm") 
     monthyear_1 = year_1 & month_1 

     path_1 = "hidden path" & year_1 & "\\" & monthyear_1 & "hidden path.xlsx" 
     ultimate_path = path_1 
    End If 

    '''' BookMarks '''' 
    BookmarkArray = Array("Book1", "Book2", "Book3", "Book4") 

    ''''For Each BookMark'''' 
    For i = LBound(BookmarkArray) To UBound(BookmarkArray) 
     lenght = Len(BookmarkArray(i)) 
     n = Mid(BookmarkArray(i), lenght, 1) 

     '''' Range Selection '''' 
     If n = 1 Then 
      range = "B4:E6" 
     End If 

     If n = 2 Then 
      range = "B9:E11" 
     End If 

     If n = 3 Then 
      range = "B14:E16" 
     End If 

     '''' Copy and Paste Excel Tables '''' 
     Set pgmExcel = CreateObject("Excel.Application") 

     pgmExcel.Workbooks.Open ultimate_path 

     same = MsgBox("Figure n° " & n & " . Is the range the same of the previous time?", vbYesNo) 

     If same = vbYes Then 
      range = range 
     Else 
      range = InputBox("Could you please me provide the new range?") 
     End If 

     If i < 3 Then 
      Dim s As Long 

      s = Selection.Start 

      pgmExcel.ActiveWorkbook.Sheets(1).range(range).Copy 

      ActiveDocument.Bookmarks(i + 1).Select 

      Selection.PasteSpecial Link:=True, Placement:=wdInLine, DataType:=wdPasteOLEObject 

      pgmExcel.Quit 

      MsgBox ("You copied range " & range & " from folder" & ultimate_path)  
     Else 
      pgmExcel.ActiveWorkbook.Sheets(1).ChartObjects(1).Copy 

      ActiveDocument.Bookmarks(i + 1).Select 

''' !!!! IN THE LINE BELOW I GET THE ERROR 5342 (Specified data type is unavailable) !!!!!! ''''' 

      Selection.PasteSpecial Link:=True, Placement:=wdInLine, DataType:=wdPasteOLEObject, DisplayAsIcon:=False 

      pgmExcel.Quit 

      MsgBox ("You copied range " & range & " from folder" & ultimate_path) 

      ActiveDocument.Save 

      Set fso = CreateObject("Scripting.FileSystemObject") 

      If Not fso.FolderExists(fldr_name) Then 
       fso.CreateFolder (fldr_name) 
      End If 

      ActiveDocument.SaveAs2 FileName:="hidden path.docx", FileFormat:=wdFormatDocumentDefault 

     End If 

    Next i 

End Sub 

답변

0

이이 경우에 도움이되지 않는 매크로 레코더와 같은 까다로운 일이다.

이 솔루션은 ChartObjects 컬렉션의 항목을 나타내는 것이 아니라 Chart.ChartArea 항목을 참조하는 것입니다.

pgmExcel.ActiveWorkbook.Sheets(1).ChartObjects(1).Chart.ChartArea.Copy 

pgmExcel.ActiveWorkbook.Sheets(1).ChartObjects(1).Copy 

에서 코드를 변경

하고 예상대로 작동합니다.

+0

작동합니다! 정말 고마워 많이 고마워 :) –