2017-11-21 21 views
0

私は20枚のExcelブックを持っており、これらのExcelシートをVBAを使用してPowerPointにインポートしようとしています。私はほぼ正確に私が行う必要があるコードを作成することができましたが、私は最後の部分のための解決策を見つけることができません..あなたが私を助けることを願っています!複数のExcel範囲をPowerPointにインポート

それぞれのシートから、別の範囲(各シートのセルA1とA2に表示されます)を選択する必要があります。

例えばExcelシート1からセルA1「B3」とセルA2「D12」にあります。つまり、このシートではVBAは範囲B3:D12をコピーする必要があります。

次のシートではまったく同じことが起こるはずですが、セルのA1セルとA2セルであきらめたものに基づいてその範囲を調整する必要があります。次のように

これまでの私のコードは次のとおりです。

Sub PrintPPT() 

'Step 1: Declare variables 
     Dim pp As Object 
     Dim PPPres As Object 
     Dim PPSlide As Object 
     Dim xlwksht As Worksheet 
     Dim MyRange As String 
     Dim Cval1 As Variant 
     Dim Cval2 As Variant 
     Dim Rng1 As Range 

'Step 2: Open PowerPoint, add a new presentation and make visible 
     Set pp = CreateObject("PowerPoint.Application") 
     Set PPPres = pp.Presentations.Add 
     pp.Visible = True 

'Step 3: Set the ranges for the data 
     Cval1 = ActiveSheet.Range("A1").Value 
     Cval2 = ActiveSheet.Range("A2").Value 
     Set Rng1 = ActiveSheet.Range("Cval1 : Cval2") 
     MyRange = "Rng1" 

'Step 4: Start the loop through each worksheet 
     For Each xlwksht In ActiveWorkbook.Worksheets 
     xlwksht.Select 
     Application.Wait (Now + TimeValue("0:00:1")) 

'Step 5: Copy the range as picture 
     xlwksht.Range(MyRange).Copy 

'Step 6: Count slides and add new blank slide as next available slide number 
'(the number 12 represents the enumeration for a Blank Slide) 
     SlideCount = PPPres.Slides.Count 
     Set PPSlide = PPPres.Slides.Add(SlideCount + 1, 12) 
     PPSlide.Select 

'Step 7: Paste the picture and adjust its position 
     PPPres.ApplyTemplate ("C:\Users\Computer\Documents\Templates\Template.potx") 
      PPSlide.Shapes.Paste.Select 
      pp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True 
      pp.ActiveWindow.Selection.ShapeRange.Top = 80 
      pp.ActiveWindow.Selection.ShapeRange.Left = 7.2 
      pp.ActiveWindow.Selection.ShapeRange.Width = 600 

'Step 8: Add the title to the slide then move to next worksheet 
     Next xlwksht 

'Step 9: Memory Cleanup 
     pp.Activate 
     Set PPSlide = Nothing 
     Set PPPres = Nothing 
     Set pp = Nothing 

End Sub 

答えて

1

あなたはセルA1とA2の値が必要な場合は、あなたの範囲を構築するときに、あなたが引用符で変数を置くことができません。

Set Rng1 = ActiveSheet.Range("Cval1 : Cval2") 

はあなたCval1としてRNG1を与える:Cval2

Set Rng1 = ActiveSheet.Range(Cval1 & ":" & Cval2) 

は(あなたの例から)RNG1 = B3があなたを与える:D12

これはあなたが必要とするすべてである必要があります。私はそれをテストしていないので、tweekingが必要かもしれません。

Sub PrintPPT() 
'Step 1: Declare variables 
     Dim pp As Object 
     Dim PPPres As Object 
     Dim PPSlide As Object 
     Dim xlwksht As Worksheet 
     Dim MyRange As String 

'Step 2: Open PowerPoint, add a new presentation and make visible 
     Set pp = CreateObject("PowerPoint.Application") 
     Set PPPres = pp.Presentations.Add 
     pp.Visible = True 
'Step 3: Start the loop through each worksheet 
     For Each xlwksht In ActiveWorkbook.Worksheets 
    MyRange = xlwksht.Range("A1").Value & ":" & xlwksht.Range("A2").Value 
       xlwksht.Range(MyRange).Copy 
'Step 4: Count slides and add new blank slide as next available slide number 
'(the number 12 represents the enumeration for a Blank Slide) 
     SlideCount = PPPres.Slides.Count 
     Set PPSlide = PPPres.Slides.Add(SlideCount + 1, 12) 
     PPSlide.Select 

'Step 5: Paste the picture and adjust its position 
     PPPres.ApplyTemplate ("C:\Users\Computer\Documents\Templates\Template.potx") 
      PPSlide.Shapes.Paste.Select 
      pp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True 
      pp.ActiveWindow.Selection.ShapeRange.Top = 80 
      pp.ActiveWindow.Selection.ShapeRange.Left = 7.2 
      pp.ActiveWindow.Selection.ShapeRange.Width = 600 

'Step 6: Add the title to the slide then move to next worksheet 
     Next xlwksht 

'Step 7: Memory Cleanup 
     pp.Activate 
     Set PPSlide = Nothing 
     Set PPPres = Nothing 
     Set pp = Nothing 

End Sub 
+0

moosemanを手伝ってくれてありがとう! このコードは、私が持っていた問題の一部を修正しますが、最初のシートでのみ機能します。残りのシートについては、シート1からの範囲を使用し続ける(残りのシートの範囲を考慮しないで)。どのようにこれを修正するための任意のアイデア? – ErikSlui

+0

私は答えを編集して、ワークシートを直接参照して範囲を取得しました。 "MyRange ="行を参照してください。 – mooseman

+0

これは完全に機能しました!ありがとうたくさんのmooseman! – ErikSlui

関連する問題