3

Excel から PowerPoint に複数のグラフを貼り付ける必要があります。いくつかの優れた VBA コードを見つけました (主に Jon Peltier のサイトで)。現在、私のパワーポイント テンプレートには多数のレイアウトがあります (たとえば、1 つのグラフがほとんどのスライドを占めている、または 1 つのグラフと 1 つのテキスト ボックスがスライド内にあるなど)。

私が望むのは、チャートをスライド レイアウトの一部にして、スライドを再フォーマットすると (たとえば、上記の例のようにレイアウトを変更すると)、それに応じてチャートが移動するようにすることです。現在、プレースホルダーがある場所に適切なサイズとすべてのものを貼り付けることができますが、それはプレースホルダーではなく、プレースホルダーにあります(したがって、レイアウトを変更してもそこに残ります)。

理想的には、レイアウト (15 から) を選択し、選択したレイアウトでプレースホルダーを選択できるようにしたいと考えています (通常、タイトル、フッター、およびチャート、画像、テキスト、またはすべてのプレースホルダーを 1 から 4 から選択します)その上)。

私は VBA プログラマーではありません。ネット上で親切に共有されているロジックとグラブ コードを少しだけ使用しています。適切なレイアウト (名前はありますが、それは変数ですか?) を識別する方法も、レイアウト内の適切なプレースホルダーもわかりません (ここでは、それらを識別する方法さえわかりません)。

どんな助けでも大歓迎です。DF

以下、所々コピーしたコード(主にJon Peltierのサイト)。

Sub ChartToPresentation()
' Set a VBE reference to Microsoft PowerPoint Object Library

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

AddSlidesToEnd = True

' Make sure a chart is selected
If ActiveChart Is Nothing Then
  MsgBox "Please select a chart and try again.", vbExclamation, _
  "No Chart Selected"
Else
' Reference existing instance of PowerPoint
Set PPApp = GetObject(, "Powerpoint.Application")
' Reference active presentation
Set PPPres = PPApp.ActivePresentation
PPApp.ActiveWindow.ViewType = ppViewSlide
' Reference active slide
Set PPSlide = PPPres.Slides _
(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)

' Copy chart
ActiveChart.ChartArea.Copy

' Paste chart
PPSlide.Shapes.Paste.Select

' Position pasted chart
' This is the keypoint
' I want to replace this with the selection of appropriate layout 
' and placeholder in that layout
PPApp.ActiveWindow.Selection.ShapeRange.Left = 19.56
PPApp.ActiveWindow.Selection.ShapeRange.Top = 66.33
PPApp.ActiveWindow.Selection.ShapeRange.Width = 366.8
PPApp.ActiveWindow.Selection.ShapeRange.Height = 424.62


If PPApp.ActivePresentation.Slides.Count = 0 Then

' Other key point
' can I add a specific layout, for example one named Two Content Layout + takeout
 Set PPSlide = PPApp.ActivePresentation.Slides.Add(1, ppLayoutBlank)
Else
    If AddSlidesToEnd Then
         'Appends slides to end of presentation and makes last slide active
        PPApp.ActivePresentation.Slides.Add PPApp.ActivePresentation.Slides.Count + 1, ppLayoutBlank
        PPApp.ActiveWindow.View.GotoSlide PPApp.ActivePresentation.Slides.Count
        Set PPSlide = PPApp.ActivePresentation.Slides(PPApp.ActivePresentation.Slides.Count)
    Else
         'Sets current slide to active slide
        Set PPSlide = PPApp.ActiveWindow.View.Slide
    End If
End If


'Clean up
Set PPSlide = Nothing
Set PPPres = Nothing
Set PPApp = Nothing


End If

End Sub
4

1 に答える 1

6

私があなたの問題を理解していれば、これがあなたの望むものだと思います。

現在、チャート「オン」を貼り付けていSlide 1ます。に関連する「」貼り付ける必要があります。Place HolderSlide 1

これを組み込むようにコードを修正してください(TRIED AND TESTED

Dim nPlcHolder As Long

With PPPres
    nPlcHolder = 2 '<~~ The place holder where you have to paste

    .Slides(1).Shapes.Placeholders(nPlcHolder).Select msoTrue
    .Windows(1).View.PasteSpecial (ppPasteMetafilePicture)
End With

これで、レイアウトを変更しても、それに応じてチャートが移動します。

スナップショット

ここに画像の説明を入力 HTH

于 2012-04-23T15:20:34.463 に答える