2013-09-25 3 views
0

내 코드는 그림, 범위 및 텍스트 상자를 Excel에서 PowerPoint로 내보내 려합니다. 범위를 비트 맵으로 붙여 넣어야하는 곳에서 오류가 발생합니다. 이 오류는 변수를 찾을 수 없다는 것을 나타냅니다. 나는 VBA를 처음 사용하고 가능한 한 도움이 필요합니다. 여기붙일 때 변수를 찾을 수 없습니다.

나는 코드를 사용하고 있습니다 :

Option Explicit 

Dim PPApp As PowerPoint.Application 
Dim PPPres As PowerPoint.Presentation 
Dim PPSlide As PowerPoint.Slide 

Sub copy_to_ppt() 

Dim wsname As String 
Dim Shapes As Shape 
Dim Range As Range 
Dim a, b As Integer 

    Set PPApp = New PowerPoint.Application 
    PPApp.Visible = True 

    Set PPPres = PPApp.Presentations.Open("C:\Users\gdjwherr\Desktop\Brazil Reports\TRP  File\TRP Test Template.pptx") 

    Sheets("Sheet1").Select 

    '----------------------------- 

    ActiveSheet.Shapes("Picture 1").Select 
    Selection.Copy 

      Set PPSlide = PPPres.Slides _ 
      (PPApp.ActiveWindow.Selection.SlideRange.SlideIndex) 
      PPApp.ActiveWindow.ViewType = ppViewSlide 
      PPSlide.Shapes.PasteSpecial(ppPasteJPG).Select 

      PPApp.ActiveWindow.Selection.ShapeRange(1).Top = PPApp.ActiveWindow.Selection.ShapeRange(1).Top + 60 
      PPApp.ActiveWindow.Selection.ShapeRange(1).Left = PPApp.ActiveWindow.Selection.ShapeRange(1).Left + 20 

ActiveSheet.Range("D3:E8").Select 
Selection.Copy 

     Set PPSlide = PPPres.Slides _ 
     (PPApp.ActiveWindow.Selection.SlideRange.SlideIndex) 
     PPApp.ActiveWindow.ViewType = ppViewSlide 
     Selection.PasteSpecial DataType:=wdPasteBitmap ```This is where the error occurs stating variable not defined and highlights wdPasteBitmap 

     PPApp.ActiveWindow.Selection.ShapeRange(1).Top = PPApp.ActiveWindow.Selection.ShapeRange(1).Top + 60 
     PPApp.ActiveWindow.Selection.ShapeRange(1).Left = PPApp.ActiveWindow.Selection.ShapeRange(1).Left + 0 

    ActiveSheet.Range("G3:H8").Select 
    Selection.Copy 

      Set PPSlide = PPPres.Slides _ 
      (PPApp.ActiveWindow.Selection.SlideRange.SlideIndex) 
      PPApp.ActiveWindow.ViewType = ppViewSlide 
      Selection.PasteSpecial DataType:=wdPasteBitmap 

      PPApp.ActiveWindow.Selection.ShapeRange(1).Top = PPApp.ActiveWindow.Selection.ShapeRange(1).Top + 60 
      PPApp.ActiveWindow.Selection.ShapeRange(1).Left = PPApp.ActiveWindow.Selection.ShapeRange(1).Left - 20 


      Set PPSlide = Nothing 
      Set PPPres = Nothing 
      Set PPApp = Nothing 

End Sub 
+1

당신은 어떤 스택 추적과 함께 정확한 오류 메시지를 게시 할 수 있습니까? –

+0

'wdPasteBitmap'은 Word VBA 상수처럼 보입니다. Excel VBA에서는 사용할 수 없습니다. 당신은 아마도'ppPasteBitmap'을 원합니다. –

+0

@Tim Williams OK가'ppPasteBitmap'으로 변경되었습니다. 이제 런타임 오류 1004가 발생합니다. 응용 프로그램 정의 또는 객체 정의 오류 ??? – William

답변

0

리팩토링의 조금 ...

Sub copy_to_ppt() 

    Dim PPApp As PowerPoint.Application 
    Dim PPPres As PowerPoint.Presentation 
    Dim ppSlide As PowerPoint.Slide 
    Dim wsname As String 
    'Dim Shapes As Shape 'don't do this! 
    'Dim Range As Range 'don't do this! 
    Dim a, b As Integer 
    Dim oLayout 

    Set PPApp = New PowerPoint.Application 
    PPApp.Visible = True 

    Set PPPres = PPApp.Presentations.Open("C:\Users\gdjwherr\Desktop\Brazil Reports\TRP  File\TRP Test Template.pptx") 
    PPApp.ActiveWindow.ViewType = ppViewSlide 
    Set ppSlide = PPPres.Slides _ 
     (PPApp.ActiveWindow.Selection.SlideRange.SlideIndex) 

    Sheets("Sheet1").Shapes("Picture 1").Copy 
    PP_Paste ppSlide, ppPasteJPG, 100, 100 

    Sheets("Sheet1").Range("D3:E8").Copy 
    PP_Paste ppSlide, ppPasteBitmap, 100, 300 

    Sheets("Sheet1").Range("G3:H8").Copy 
    PP_Paste ppSlide, ppPasteBitmap, 100, 500 

    Set ppSlide = Nothing 
    Set PPPres = Nothing 
    Set PPApp = Nothing 

End Sub 

Sub PP_Paste(ppSlide As PowerPoint.Slide, fmt, posTop, posLeft) 
    With ppSlide.Shapes.PasteSpecial(fmt) 
     .Top = posTop 
     .Left = posLeft 
    End With 
End Sub 
+0

작품을 추가하면됩니다. 텍스트 상자를 가져올 수있는 몇 가지 사항 ... 감사합니다. – William

+0

새 프레젠테이션 대신 열 필요가있는 파일을 어떻게 추가합니까? 이미 가지고있는 프레젠테이션을 추가하고 싶습니다. – William

+0

원래 질문과 동일한 코드를 사용하십시오. 테스트하기가 더 빨라서 새로운 프레젠테이션을 실행했습니다 ... 제 편집을 봅니다. –

관련 문제