2 つ以上の pp プレゼンテーションを 1 つの新しいプレゼンテーションに結合するプロジェクトに取り組んでいます。元の pp プレゼンテーションの選択は Web ベースの Lotus Notes xPage で行われ、送信後、Lotusscript は OLE Powerpoint オブジェクトと対話します。新しいプレゼンテーションにスライドを正しい順序で追加することは問題ありません。問題は、スライド テンプレートとの元の接続を追加した後に失われることです。
これを解決するために、次のコードスニペットを見つけました。
Sub joiner()
Dim sFileName As String
Dim oDonor As Variant
Dim otarget As Variant
Dim i As Integer
On Error GoTo errhandler
Set otarget = ActivePresentation
Do While sFileName <> ""
Set oDonor = Presentations.Open(Environ("USERPROFILE") & "\Desktop\joiner\" & sFileName, msoFalse)
For i = 1 To oDonor.Slides.Count
oDonor.Slides(i).Copy
With otarget.Slides.Paste(otarget.Slides.Count + 1)
.Design = oDonor.Slides(i).Design
.ColorScheme = oDonor.Slides(i).ColorScheme
End With
Next i
oDonor.Close
Set oDonor = Nothing
sFileName = Dir()
Loop
End Sub
lotusscript が理解できないため、プレゼンテーション oDonor と oTarget をバリアントとして宣言する必要があります。Dim oTarget As Presentation
これがおそらく、次の場所でコードが typemismatch エラーを返す理由です。
.Design = oDonor.Slides(i).Design
私の質問は次のとおりです。
- 正しい方法で参加していますか、それともより良い解決策がありますか?
- typemismatch エラーの解決策はありますか?
*ps: 結果のプレゼンテーションは編集可能である必要はないので、テンプレートを追加する必要はないかもしれません。
2012 年 4 月 10 日更新: 次のコードは、テンプレートの問題を解決します。現在まだ欠けているのは、一部のスライドで使用されている背景画像です。参照: https://stackoverflow.com/questions/12731691/how-to-export-a-backgroundimage-of-a-slide-to-the-filesystem
Dim oDonor As Variant
Dim h As Integer
Dim thetmplt As Variant
Dim thetmpltname As String
Dim thetmpltnew As Variant
Dim thetmpltnamenew As String
Set oDonor = PPApplication.Presentations.Open(tempdirectory +
jobid+CStr(filenamearray (i)),False,False,False)
thetmplt = oDonor.TemplateName
Call oDonor.SaveAs(tempdirectory +jobid+CStr(i)+ thetmplt+".pot" ,5, -1)
For h = 1 To oDonor.Slides.Count
Dim oTargetSlide As Variant
oDonor.Slides(h).Copy
Set oTargetSlide = newPres.Slides.Paste()
Next
Dim theubound As Variant
theubound = oDonor.Slides.Count
ReDim thearray(1 To k + theubound) As Variant
For k = k To k + oDonor.Slides.Count-1
thearray(k) = k
Next
Call newPres.Slides.Range(thearray()).ApplyTemplate(tempdirectory +
jobid+CStr(i+thetmplt+".pot")
oDonor.Close
Set oDonor = Nothing