Excel VBAでパワーポイントの操作をしています。
スライドマスタにある特定の単語の置換がしたく、下記サイトのコードを拝借させていただいたのですが、
http://www.fingeneersblog.com/1168/
Set pptPrs = pptObj.Presentations.Open("[パワーポイントファイルのパス]")
というところを既に開いているパワポを認識させたいのですが、
Set pptPrs = ActivePresentation
と変更してみたのですが、「クラスが登録されていません」と出て上手くいきません。
開いているパワーポイントを操作させるにはどうすれば良いでしょうか?
使ったコード↓
Public Sub ReplaceMaster()
'--- プレゼンテーションを開く ---'
Dim pptObj As PowerPoint.Application
Dim pptPrs As PowerPoint.Presentation
Set pptObj = CreateObject("PowerPoint.Application")
pptObj.Visible = True
Set pptPrs = pptObj.Presentations.Open("[パワーポイントファイルのパス]") ’←ここです。
'--- 置換前の文字列 ---'
Dim orgStr As String
orgStr = "部署名"
'--- 置換後の文字列 ---'
Dim replacedStr As String
replacedStr = "部署名 / " & Format(date,"yyyy/m/d")
'--- 文字列を置換する ---'
Dim slideObj As Slide
Dim shapeObj As Variant
Dim customLayoutObj As Variant
Dim textTmp As String
For Each slideObj In pptPrs.Slides
'--- MasterのShapesを指定 ---' For Each shapeObj In slideObj.Master.Shapes Call replaceShapeText(shapeObj, orgStr, replacedStr) Next shapeObj '--- MasterのCustomLayoutsを指定 ---' For Each customLayoutObj In slideObj.Master.CustomLayouts For Each shapeObj In customLayoutObj.Shapes Call replaceShapeText(shapeObj, orgStr, replacedStr) Next shapeObj Next customLayoutObj
Next slideObj
'--- ファイルを閉じる ---'
pptPrs.Close
End Sub
'--- ShapeオブジェクトのTextを置換する ---'
Private Sub replaceShapeText(shapeObj As Variant, orgStr As String, replacedStr As String)
'--- グループの場合は再度各要素に対して置換を実行 ---'
If (shapeObj.Type = msoGroup) Then
Dim shapeTmp As Variant For Each shapeTmp In shapeObj.GroupItems Call replaceShapeText(shapeTmp, orgStr, replacedStr) Next shapeTmp
Else
Dim textTmp As String
'--- テキストを取得 ---' textTmp = shapeObj.TextFrame.TextRange.Text '--- テキストを置換 ---' textTmp = Replace(textTmp, orgStr, replacedStr) '--- テキストを再度設定 ---' shapeObj.TextFrame.TextRange.Text = textTmp
End If
End Sub
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/04 21:19