2016-07-18 15 views
0

私はオブジェクトとしてExcelテーブルをほとんど持たないPowerPointプレゼンテーションを持っています。 Excelファイルは週に1回更新されます。 Excelファイルが更新されたら、PowerPointを開き、各オブジェクトをダブルクリックする - >メニューデータ - >リンクを編集 - >すべてのソースを選択 - >値の更新が必要です。PowerPointでExcelオブジェクトを更新するマクロ

最近ExcelでVBAを使い始めましたので、PowerPointですべてのExcelオブジェクトを見つけて更新するマクロを書くことができるかどうかは疑問でした。

ウェブを検索した後、私はオブジェクトをダブルクリックするまで私を連れてくる次のコードを取得することができましたが、リンクの更新方法はわかりません。

Sub update_objects() 

    Dim it As String 
    Dim i As Integer 
    For i = 1 To ActiveWindow.Selection.SlideRange.Shapes.Count 

     With ActiveWindow.Selection.SlideRange.Shapes(i) 
      If .Type = msoEmbeddedOLEObject Then 
       ActiveWindow.Selection.SlideRange.Shapes(i).Select.OLEFormat.DoVerb 
      End If 
     End With 
    Next i 
End Sub 
+0

理論上、ActivePresentation.UpdateLinksはそれを行う必要があります。あなたはそれを試しましたか? –

+0

@SteveRindsbergアドバイスありがとう、私はそれを試して、プレゼンテーションが開かれたときに更新されるプレゼンテーションのグラフのみを更新します。私が持っているものは、更新が必要なExcelテーブルからの実際のテーブルです。ありがとう、ユリ – Yuri

+0

具体的にExcelテーブルを意味しますか(Excelのセルの束とは対照的に、テーブルのように見えます)?テーブルの振る舞いはわかりませんが、リンクされたセルの場合はリンクの更新が必要です。セルの範囲が埋め込まれている場合、いいえ。変更が発生するには、Excelオブジェクトをアクティブ化する必要があります。 –

答えて

0

このコードは機能しますが、すべてのインスタンスで機能するわけではありません。それは2010年のために書かれました。 必要に応じてタイプを変更してください。 7はExcel Embeddedオブジェクトです。

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
    Sub open_and_close_all_objects() 
    'This will open and then close all charts and graphs in the presentation to allow them to keep the data 
    'Why this is needed is a question to be answered in the future. 


    Dim oSH As Shape 
    Dim oSl As Slide 
    Dim oSheet As Object 


    For Each oSl In ActivePresentation.Slides 
     For Each oSH In oSl.Shapes 

     ActiveWindow.View.GotoSlide oSl.Slideindex 
      If oSH.Type = 7 Then 
       oSH.Select 
       oSH.OLEFormat.Activate 

       Call Sleep(1500) 

       ActiveWindow.Selection.Unselect 
       ActiveWindow.View.GotoSlide oSl.Slideindex 
      End If 

     Next 


    Next 
    End Sub 
関連する問題