アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelのVBAで、PowerPointのファイルに対し処理を行ないたいと思っています。
処理の前にファイルを選択し、そのファイルが既に開かれていた場合に処理を中断する判定を入れたいと思っているのですが、ファイル選択後に
「実行時エラー429ActiveXコンポーネントは、オブジェクトを作成できません」
というエラーになってしまいます。
「For Each PptFile In」のあとの「PowerPoint.Presentations」の記述に問題があるようなのですが、改善方法をお教えいただけませんでしょうか。

Sub test()
Dim PptApp As PowerPoint.Application
Dim PptFile As Object
Dim myFilename As String

myFilename = Application.GetOpenFilename
Set PptFile = GetObject(, "Powerpoint.Application")
For Each PptFile In PowerPoint.Presentations
If PptFile = Dir(myFilename) Then
MsgBox "指定したファイルは開かれています"
Exit Sub
Else
MsgBox "PowerPointの処理を実行します"
'処理
End If
Next
End Sub

A 回答 (1件)

こんばんは。



どこが間違いとかいうよりも、私なら、こう書いているかなっていう感じですね。直してみると、違った趣旨のコードが残る所をみると、まったく違ったことを考えていらっしゃるのかなぁっていう気がします。

'//
Sub test1()
 Dim PptApp As Object
 Dim PptFile As Object
 Dim myFilename As String
 
 myFilename = "PowerPointの使い方" 'Application.GetOpenFilename 
'ここでファイル名を求めると、まったく違った内容になるはずです。
 Set PptApp = GetObject(, "Powerpoint.Application")
 If PptApp Is Nothing Then
  MsgBox "PowerPointは、起動しておりません", vbExclamation
  Exit Sub
 Else
  For Each PptFile In PptApp.Presentations
   If PptFile.Name Like myFilename & "*" Then
    MsgBox "指定したファイルは開かれています"
    Exit Sub
   Else
    MsgBox "PowerPointの処理を実行します" 'この意味が分かりません。
   '処理
   End If
  Next
  End If
End Sub
'//
    • good
    • 1
この回答へのお礼

ご報告が遅くなってしまってすみません。
実際には選択されたファイル種別を判定したうえで、PowerPointのファイルだった場合にこの処理を行なおうと思っており、ちょっと無理やり一部分を抜き出したため、間違いもありました。。
ですが、WindFallerさんのソースで目的が達成できました。
どうもありがとうございました。

実はこの内容でWordも同じように判定できると思って試したのですがうまくいかず、原因の確認に時間がかかってしまいました。
Wordは多重起動ができるため、うまくいかない場合があることがわかったのですが、また内容を整理したうえで質問させていただこうと思います。

どうもありがとうございました。

お礼日時:2016/11/24 17:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A