2017-08-20 18 views
1

Excelから完成したPowerPointプレゼンテーションに貼り付けようとしています。私はPeltier TechとSpreadsheet Guruから少しのコードを取りました。マクロは、PowerPointに貼り付ける別のExcelワークシートを作成するExcelテンプレート内で動作するように意図されています。ExcelワークシートをPowerPointプレゼンテーションに貼り付けます。

出力ワークシート自体でコードをテストしたところ、動作しています。マクロはExcelテンプレートで本当のために実行された場合

Output when Macro works

しかし、それは失敗します。

Output when Macro fails

私はオブジェクト変数として出力ワークシートを定義する必要がありますか?そして、ExcelのPowerpointペーストループとMyRangeArrayセクションでその変数をどのように参照するのですか?

objPPTはgrandFinale()のマクロの上流に定義されています。

Sub grandFinale() 

Dim PPPres As PowerPoint.Presentation 
Dim PPSlide As PowerPoint.Slide 
Dim shp As Object 
Dim MySlideArray As Variant 
Dim MyRangeArray As Variant 
Dim x As Long 

Set objPPT = GetObject(, "Powerpoint.Application") 
Set PPPres = objPPT.ActivePresentation 
Set PPSlide = PPPres.Slides(objPPT.ActiveWindow.Selection.SlideRange.SlideIndex) 

'declare pp slides 
MySlideArray = Array(13, 14, 15, 16, 17, 18, 19, 20, 21, 22) 

'declare excel ranges 
MyRangeArray = Array(Sheet2.Range("A6:C18"), Sheet2.Range("A21:C33"), _ 
    Sheet2.Range("A36:C48"), Sheet2.Range("A51:C63"), Sheet2.Range("A66:C78"), _ 
    Sheet2.Range("A81:C93"), Sheet2.Range("A96:C108"), Sheet2.Range("A111:C123"), Sheet2.Range("A126:C138"), Sheet2.Range("A141:C153")) 

'excel to powerpoint paste loop 
For x = LBound(MySlideArray) To UBound(MySlideArray) 
MyRangeArray(x).Copy 
Set shp = PPPres.Slides(MySlideArray(x)).Shapes.PasteSpecial(DataType:=2) 
'adjust images 
With PPPres.PageSetup 
    shp.Left = (.SlideWidth \ 2) - (shp.Width \ 2) 
    shp.Top = (.SlideHeight \ 2) - (shp.Height \ 2) 
End With 

Next x 
Application.CutCopyMode = False 
End Sub 
+1

今私には、マクロを含むブックのSheet2からコピーしているようです。別の(テンプレート)ワークブックを開くコードは表示されませんが、Set wk = Workbooks.Open( "C:\ test.xlsx")のようなものだと仮定します。もしそうなら、Set sh = wk.Worksheets( "nameOfSheet")のようなものを使ってそのブックに必要なシートを参照し、コード内のSheet2をshに置き換えます(Dim wkをWorkbookとして最初に定義した後、shワークシート) –

答えて

0

元の質問は別のブックであり、かつマクロは、他のワークブック から実行された場合は、最初

で新しいブックを作成する必要があります 、元のワークシートがあるか、何にとしていくつかの詳細を欠い
dim wb as workbook 
wb = application.workbooks.add 

ワークブックを使用して、特定のシートを取得する代わりに

set wb = workbooks.open("templateWB.xls") 

開い使用する既存のワークブックの場合

dim ws as worksheet 
ws =wb.worksheets(1) 

またはWS変数はマクロ

に送信される
dim ws as worksheet 
set ws = wb.worksheets.add 

スクラップから1を作る:あなただけのあなただけの最初のシートを使用することができスクラップから新しいブックを作成した場合は、必要
grandFinale ws 

あなたは、引数

Sub grandFinale(tempsheet as Worksheet) 
012としてワークシートを取るために、あなたのサブを変更する必要があります

は、tempsheetまたは使用する変数名のすべてのSheet2を変更します。

+0

元のワークシートは別のExcelブックにあり、マクロはそのブックから実行されます。マクロは、元のワークシートを取り、新しいブックに値を貼り付け、テキストの太字やフォントの変更、セルのマージなどのタスクでデータを再フォーマットします。新しいブックのSheet2は6枚中1枚です。 @トニーM私はそれを宣言する必要がありますので、新しいブックを開くためにレコードマクロで作られたいくつかの古いコードを使用しました。私は更新をチェックインします! –

+1

流れ図@jluceroをありがとう、私は最初の行の "db"は "wb"を読むべきだと思うが、マクロを動かすのを助けていた。私はワークブックを使いました。メソッドを追加して新しいブックを開き、それを上記のマクロのMyRangeArray要素のオブジェクトとして参照します。私はまた、多くのレコードマクロコードを削除し、grandFinale()が1つだったマルチマクロを1つのマクロに集約しました。それは物事を単純化するのを助けました。 –

関連する問題