2017-12-09 11 views
0

をアクティブ化しようとすると、私は困惑し、私はダム何かが欠けているとを持っているように私は感じて...コンパイルエラー私は、プレゼンテーション

このマクロは、そのコードでマクロを呼び出すし、実行することを意図しています別のファイルに含まれており、最初のマクロが実行されたオープンプレゼンテーションにマクロを適用します。コンパイルエラーが発生しました:メソッドまたはデータメンバーが2行目から最後の行に見つかりません。私がその行をコメントアウトすると、コードは正しく実行されますが、間違ったプレゼンテーションにマクロが適用されます。

アイデア?事前に

おかげで、 ジョー

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

[Documentation](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として開きます。ブリーフィングテンプレート=プレゼンテーション1を設定しようとしていますか? –

+0

あなたの質問では、(最初​​のマクロが実行された)オープンプレゼンテーションにマクロを適用すると言っていました。マクロを実行したときにアクティブなプレゼンテーションではなかったプレゼンテーションに実際に適用する場合は、そのプレゼンテーションへの参照を設定し、**そのプレゼンテーション参照を 'a_RunAll_PM'に渡します。 – YowE3K

+0

マクロを実行するとアクティブになりますが、 "CODE.potm"を開くと自動的に "CODE.potm"がアクティブになります。 - したがって、マクロは、空白のテンプレートではなく "CODE.potm"に "適用"されます。 テンプレートを使用したときに開く「Presentation1」など、保存された名前なしでプレゼンテーションへの参照を設定するにはどうすればよいですか? –

関連する問題