2017-12-09 5 views
0

내가 난처한 상황에 빠진거야를 활성화 할 때 내가 바보 뭔가가 될있어 같은 느낌 다른 파일에 포함되어 있고 열려있는 프리젠 테이션 (초기 매크로가 실행 된 매크로)에 "적용"됩니다. 컴파일 오류가 발생합니다 : 메소드 또는 데이터 멤버가 두 번째 행에서 마지막 행에 없습니다. 해당 줄을 주석 처리하면 코드가 제대로 실행되지만 잘못된 프레젠테이션에 매크로가 적용됩니다.컴파일 오류가 나는 프리젠 테이션을

아이디어가 있으십니까? 사전에

감사합니다, 조

Function IsPresentationOpen(Name As String) As Boolean 
    Dim codePres As Presentation 
    On Error Resume Next 
    Set codePres = Application.Presentations.Item(Name) 
    IsWorkBookOpen = (Not codePres Is Nothing) 

End Function 

Sub Run_Macro() 

    Dim BriefingTemplate As Presentation 
    Set BriefingTemplate = Application.ActivePresentation 

'Open Joe's Code Workbook 
    Dim xRet As Boolean 
    xRet = IsPresentationOpen("CODE.potm") 
    If xRet Then 
    Else 
     Presentations.Open "Direcory\CODE.potm" 
    End If 

'Run Macro 
    BriefingTemplate.Activate       '<<This is the line w/ the error 
    Application.Run ("'CODE.potm'!Macro"), BriefingTemplate 


End Sub 

Sub a_RunAll_PM(BriefingTemplate As Presentation) 

BriefingTemplate.Activate 

    Call a_Scorecards_PM 
    Call CurrentTemps_PM 
    Call RadarSat_PM 
    Call Severe_PM 
    Call Day1_PM 
    Call Day2 
    Call JetStream_PM 
    Call Operational_Impact_PM 
    Call D1_Headlines_PM 
    Call D2_Headlines 
End Sub 

Sub a_Scorecards_PM() 
    Dim oPic As Shape 
    Set oPic = ActivePresentation.Slides(1).Shapes.AddPicture(_ 
    FileName:="H:\Weather Briefs\Daily Ops Scorecards\SWA_Page_1.jpg", _ 
    LinkToFile:=msoFalse, _ 
    SaveWithDocument:=msoTrue, Left:=0, Top:=0, _ 
    Width:=720, Height:=540) 

    ActivePresentation.Slides(1).Copy 
    ActivePresentation.Slides.Paste 24 

End Sub 
+1

FWIW -'IsPresentationOpen'은 반환 값을 지정하지 않기 때문에 항상'False'를 반환합니다. – YowE3K

+2

[문서] (https://msdn.microsoft.com/en-us/vba/powerpoint-vba/articles/presentation-object-powerpoint)에 따르면,'Presentation' 객체는'Activate' 메소드를 가지고 있지 않습니다 - 이것이 그 방법이 존재하지 않는다고 말하는 이유입니다. TBH, 문제가 "매크로"에있는 코드와 관련이 있다고 생각합니다. 올바른 프레젠테이션을 업데이트하는 방법으로 쓰여지지 않은 것 같습니다. 그래서 우리가 당신이 그 코드를 수정하도록 도와달라고 요청하면 유용 할 것입니다. – YowE3K

+1

'xRet'을 제거하고 IsPresentationOpen ("CODE.potm")이 아니라면 Presentations.Open "Direcory \ CODE.potm"을 사용하여 코드를 간소화하십시오. – jsotola

답변

0

보다는 업데이트 할 프레젠테이션, 액세스해야하는 각 절차에 매개 변수로 프레젠테이션을 전달합니다 "활성화"

'I am assuming "a_RunAll_PM" is what is called "Macro" in your original question code 
Sub a_RunAll_PM(BriefingTemplate As Presentation) 

    'Removed "Call" as that is obsolete 
    a_Scorecards_PM BriefingTemplate '<-- pass the presentation as a parameter 
    CurrentTemps_PM BriefingTemplate '<-- may need to pass to other procedures too? 
    RadarSat_PM 
    Severe_PM 
    Day1_PM 
    Day2 
    JetStream_PM 
    Operational_Impact_PM 
    D1_Headlines_PM 
    D2_Headlines 
End Sub 

Sub a_Scorecards_PM(pres as Presentation) 
    Dim oPic As Shape 
    'Use the "pres" parameter rather than "ActivePresentation" 
    Set oPic = pres.Slides(1).Shapes.AddPicture(_ 
    FileName:="H:\Weather Briefs\Daily Ops Scorecards\SWA_Page_1.jpg", _ 
    LinkToFile:=msoFalse, _ 
    SaveWithDocument:=msoTrue, Left:=0, Top:=0, _ 
    Width:=720, Height:=540) 

    pres.Slides(1).Copy 
    pres.Slides.Paste 24 

End Sub 
+0

이 작동하지만 모든 매크로가 포함 된 프리젠 테이션 (가장 최근의 활성 프레젠테이션 이후의 기능)과는 대조적으로 빈 오픈 템플릿에 매크로를 적용하는 문제는 여전히 해결되지 않습니다. 코드를 실행하기 위해 그것을여십시오). 템플릿을 열면 Presentation1로 열립니다. BriefingTemplate = Presentation1을 설정하려고합니까? –

+0

당신의 질문에 당신은 매크로를 열린 프리젠 테이션 (초기 매크로가 실행되었던 곳)에''적용 '했다. 매크로가 실행될 때 활성 프리젠 테이션이 아닌 프리젠 테이션에 실제로 적용하려면 예, 해당 프리젠 테이션에 대한 참조를 설정하고 ** 해당 프리젠 테이션 참조를 'a_RunAll_PM'으로 전달하십시오. – YowE3K

+0

매크로가 실행될 때 활성화되지만 "CODE.potm"을 열면 자동으로 "CODE.potm"이 활성화됩니다. 따라서 매크로는 원하는 빈 템플릿 대신 "CODE.potm"에 "적용"됩니다 . 템플릿을 사용할 때 열리는 "Presentation1"과 같은 저장된 이름없이 프레젠테이션에 대한 참조를 설정하려면 어떻게해야합니까? –