dポイントプレゼントキャンペーン実施中!

パワポのマクロの件で質問です。
パワポのマクロでAuto_Closeは使えるのでしょうか?
作ってみたのですが、閉じてもマクロが実行されてないようなのです・・・

たとえば

Sub Auto_Close()

Msgbox "閉じます"

End sub

としても、何もおきずに閉じてしまいます。

分かる方がおられたら教えてください

※使用環境
WindowsXP
パワーポイント2003

A 回答 (8件)

こんにちは。



>イベントの書き込み方法等を詳しく教わり有難く思っております。

もっと大事なことを書きました。私のデバッグの方法です。今まで、全容は一度も公開したことがありません。今まで、そういう必要がなかったからですが。
デバッグは、Debug.Print やWatch Window を使えばよいとお思いかもしれませんが、意外に、これらは不便です。特に、Debug.Print は、そんなに多くバッファが取れませんので、せいぜい、数行に限られますし、それぐらいなら、ローカルウィンドウを使えば済みます。

「へー、こんなことをしているのだ」っていうだけでよいのです。人は人なのですが、デバッグに、Watch Windowsとか言っている人がいたのですが、本当かなって思いました。

ところで、再びお詫びというか、最初の質問から、その内容を読み違えていたところにあったように思います。一ひねり考えてしまいました。他の人が書いていたら、おそらく、もっと早い段階で解決したものだと思いますが、私は、別の考えたところに、突っ込んでしまった後では、すぐに気が付かなかったのです。

>パワーポイント本体(アプリケーション)を閉じるとエラーがでます。

普通は、ファイルとアプリケーションとは同時に終了するから、エラーは出ないはずですが。
単に「閉じる」という動作そのものに表示を出すということではないかと思いました。そうすれば、ファイル名も関係なくなります。

イベントの部分は、以下のようでよいはずです。Pres.Name は、ファイル名が出ます。ここから、構築して行くべきでした。
これが、本来の基本形です。
'-------------------------------------------

Public WithEvents app As Application
Private Sub app_PresnetationClose(ByVal Pres as Presentation)
   MsgBox Pres.Name & "閉じます" '
End Sub
    • good
    • 0
この回答へのお礼

貴重な情報をご教授していただきありがとうございました。
僕の本来のやりたいことは、ファイル毎に2箇所にファイルを保存しバックアップを自動でしたいと言う事から始まりました。
エクセルでは、いろいろな情報を調べてある程度作れたのですがパワーポイントは全く歯が立ちませんでした。
そこで、基本的に閉じる時にアクションをおこせるマクロの作り方が知りたかったのです。
今後は、この動きを(アドインやマクロなど)参考にして完成させたいと思います。
Wendy02さんのデバック方法などを上手に使えるように頑張ります。
また、ファイル名を確認して実行するif文も上記の動きには必要な部分です。Wendy02さんにご教授いただいて私自身のかなりのスキルアップにつながると思いますので感謝しております。
ありがとうございました。
長い期間、貴重な情報と時間をおさき頂いてありがとうございました。
今後、また躓いた際は、どうぞご教授願います。

お礼日時:2009/09/28 09:49

こんにちは。



>何か手順に誤りがありますでしょうか

最初に、まことに大変にすみません。お恥ずかしい話ですが、私のつづりが違っていました。
オブジェクトエラーが出るはずです。なんといっていいやら、穴があったら入りたいぐらいです。言われてすぐに気がつくべきでした。(自分の書き込みを削除したいぐらいです。(^^;←本当に汗が出てきています。)

訂正後(一文字直せばよいけれども……)
-------------------------------------------
Public WithEvents app As Application
Private Sub app_Presnetation Close(ByVal Press as Presentation)
 If UCase(ActivePresentation.Name) Like UCase("Test1.ppt") Then
 '実行するファイルをtest1.pptとした場合
   MsgBox "閉じます" '
 EndIf
End Sub
'-------------------------------------------
本来は、
 If UCase(Press.Name) Like UCase("Test1.ppt") Then
と書けばよかったはずですが、少し不安があって書き換えたことが良くありませんでした。

この回答への補足

こちらこそ、コピペしたばかりに気づきませんでした
すみませんでした。

ファイルを閉じる時には閉じますとメッセージがでました。
しかし、パワーポイント本体(アプリケーション)を閉じるとエラーがでます。
できれば、本体を閉じる時も同じようにできたらいいのですが、重ねてご教授願えますでしょうか?
もしも、出来ない場合は本体を閉じる時に別なメッセージを出す(ファイルから閉じましょうなど)を出すことはできますでしょうか?
わがままばかり言って申し訳ございません

怪我の功名で、イベントの書き込み方法等を詳しく教わり有難く思っております。

補足日時:2009/09/25 13:10
    • good
    • 0

>上記の確認事項では、appがポップアップしました。



それでは、その部分は問題はありません。


もう、デバッグモードで、デバッグを進めていくしかありません。

デバッグ--VBAプロジェクトのコンパイル
それで、間違っていれば、どこかでエラーが発生します。

次に、表示--ローカルウィンドウ-->以下にマウスカーソルを置く--->次にF8を押す。
'-------------------------------------------
'標準モジュール
'-------------------------------------------
Public MyClass As Class1
Sub Auto_Open() '←ここ以下にマウスカーソルを置く--->次にF8を押す
 Set MyClass = New Class1
 Set MyClass.app = Application 
End Sub '←*ここまで来たら、止める

'-------------------------------------------
数回、F8を押していくと黄色の帯が進んで生きます。

黄色の帯がEnd Subまで来たら、
ローカルウィンドウ側のModule1 をクリック。
その中に、+ MyClass があるはずです。
その+のところをクリック
その中に、+app があるはずです。
そうしたら、その中に、Application が確保されているはずです。
右側を見ると、Application と書いてあるはずです。
それで、Application オブジェクトが確保されました。

これで、ひとまず完成です。

本来、仮のチェックプログラムを置きたいところですが、現行のプログラムでは、チェックプログラムと同質の内容ですから、割愛します。

しかし、こちらとしては、アドイン自体が動くかどうかの検討はされていません。
基本的には、アドインはしかるべき場所においてあることが条件です。

通常は、ここです。(XPの場合で、Vistaでも、同様の場所があります)
C:\Documents and Settings\[User Name]\Application Data\Microsoft\AddIns\

次に、メニューから、ツール--アドイン--参照--登録したファイルを選択して登録をしていないとできません。

セキュリティで、信頼できる発行元--組み込み済みのアドインを信頼する 
は登録していないといけません。
「パワーポイントでマクロ(Auto_Clo」の回答画像6

この回答への補足

いつも、根気強くご教授いただきありがとうございます。
上記操作を行ないました
1.デバック(コンパイル)→エラーなし
2.ローカルウィンドウチェック→appの表示までOK
3.アドインの位置→通常の位置にあります
4.アドイン登録→新規追加・読み込みで完了
5.セキュリティ登録→登録OK
以上の操作を完了しましたが、同様のエラーが発生します。

ここで、手順のおさらいをお願いできますでしょうか
1.VBEにてclassモジュールの挿入で「Public WithEvents app As Application」を入力してAppを選択後「PresentationClose」を選択して、不要なイベントを削除し、「If ~ End If」までを入力しコンパイルで確認
2.標準モジュールの挿入で「Public MyClass ~ End Sub」までを入力し、コンパイルで確認後、ローカルウィンドウでF8チェック
3.名前をつけて保存で、種類をppaに選択して適当な名前でアドイン格納場所へアドインを保存する。
4.名前をつけて保存で、「test1.ppt」で適当な位置で保存
5.閉じる(この部分でエラー424が発生)
6.再度test1を開いてマクロを有効、アドインの登録確認、セキュリティの確認をする

以上の手順で行なっても、閉じる際にエラー424が発生します

何か手順に誤りがありますでしょうか

何度も申し訳ございません。

補足日時:2009/09/25 09:15
    • good
    • 0

こんにちは。



>閉じるとエラー'424'
>オブジェクトが必要ですと出ます。

アドイン・ファイルの中の
VBEditor のメニュー--挿入--標準モジュールをクリックして、[標準モジュール]を挿入した後に、以下のコードが入れてなくてはなりません。もしかしたら、以下のコードが、同じ場所に入れていませんか?別々の場所です。ややこしいのですが、そういうことになっています。

-------------------------------------------
' 標準モジュール
'-------------------------------------------
Public MyClass As Class1 '← 一番上
Sub Auto_Open()
 Set MyClass = New Class1 '←ここがオブジェクトが生成される
 Set MyClass.app = Application '*
End Sub

'-------------------------------------------

* 確認するときは、クラス設定されていれば、以下の場所で
 Set MyClass. ←ピリオドを入れると、app がポップアップします。

アドインを設定したら、一旦、アプリケーションソフトを一旦終了して、再度立ち上げ、ファイルを開くと、マクロが設定されます。

絵付きのサンプルサイトがあると良いのですが、こういう方法は、あまりありませんので、もう少しがんばってみてください。

この回答への補足

遅くなり申し訳ございません。
何度も綴りなどを確認するのですが、貴殿の言われたとおり入力されているにもかかわらず、同じエラーがでます。
上記の確認事項では、appがポップアップしました。
一生懸命、説明していただいているのに成果が出ておらず申し訳ございません。

補足日時:2009/09/24 08:23
    • good
    • 0

こんにちは。



>やはり2003だからでしょうか

そういうことはありません。もう一度、手順を確かめてください。

まず、Class1 モジュールは、VBEditor のメニューの挿入--クラスモジュール(c) をクリックして、
Class モジュールを挿入させます。

その時に、ソフトウェアの一番上の部分で、モジュール名が、「Class1」 となっていることを確認してください。
「Micorosot Visual Basic -********--[Class1(コード)]
**** はファイル名

そして、イベント名を、エディタ・ペイン(白い画面)の上部に以下のように書き込むと、

Public WithEvents app As Application

画像のように、
 (General)
 app
 Class

とありますので、app を選択すると、適当なイベントが出現します。
左側が「app」と出ているところで、今度は、右の窓から、PresnetationClose を選ぶと、正しいイベントが選択されます。
最初にできた不必要なイベントは、削除しておいてください。通常、このようにして、設定されます。
「パワーポイントでマクロ(Auto_Clo」の回答画像4

この回答への補足

無知で申し訳ございませんでした。
設定することができました。
そこで、閉じるとエラー'424'
オブジェクトが必要ですと出ます。
次から次へと頼ってばかりで本当に申し訳ございません。
どうぞよろしく御願い致します

補足日時:2009/09/18 14:32
    • good
    • 0

こんにちは。



PowerPoint は、2003も2007も、VBAの仕様としては、ほとんど同じはずですが、コードをチェックしたのは、PowerPoint 2007 だけです。

前回、リストから引用しただけだったので、私の#2のCloseの部分は間違っていました。お手数かけてすみません。回答者として、不勉強な上にうかつでした。

他に書き方もありますが、ここは、こんな風にしてください。

If UCase(ActivePresnetation.Name) Like UCase("Test1.ppt") Then

'Class1側

'-------------------------------------------
Public WithEvents app As Application
Private Sub app_Presnetation Close(ByVal Press as Presentation)
 If UCase(ActivePresnetation.Name) Like UCase("Test1.ppt") Then '実行するファイルをtest1.pptとした場合
   MsgBox "閉じます" 'メッセージボックスに「閉じます」と表示してから閉じる
 EndIf
End Sub
'-------------------------------------------
アドインは編集できない場合もありますので、その場合は、コードをすべて入れて、同名のファイル名(アドイン)で上書きしてしまってください。

クラス側のイベント名が正しく入っているかのチェックポイントを図にして入れておきます。
「パワーポイントでマクロ(Auto_Clo」の回答画像3

この回答への補足

いつも、アドバイスありがとうございます。

何度もチャレンジしてみるのですが、「WithEvents」が正しくはいりません。
ご指導のクラス側のイベント名チェックポイントの左側にappが入らずに右側にapp_Presnetation Closeと入ってしまいます。
なぜなんでしょうか?
はやり2003だからでしょうか
何度もお手数をおかけしてもうしわけございません。
どうぞよろしく御願い致します。

補足日時:2009/09/18 09:00
    • good
    • 0

こんばんは。



> 試しにアドインで保存して、アドインを導入しても動かないようです。

#1の書き込みは、簡単に書きすぎました。
WordもExcelも今後こうなるのかもしれませんが、サンプル・コードを最初見てください。

アドインで保存するコード
挿入で、標準モジュール と クラスモジュールを設けます。
'-------------------------------------------
' 標準モジュール
'-------------------------------------------
Public MyClass As Class1
Sub Auto_Open()
 Set MyClass = New Class1
 Set MyClass.app = Application
End Sub

'-------------------------------------------
'Class1
'-------------------------------------------
Public WithEvents app As Application

Private Sub app_AfterPresentationOpen(ByVal Pres As Presentation)
 'Test1.p* --- ファイル名
 If ActivePresentation.Name Like "Test1.p*" Then 'ファイル名で選別
  MsgBox Time '実行する部分
 End If
End Sub


'-------------------------------------------
後は、たぶん分かるとは思いますが、

Office ホームキー(左上の丸いボタン)--アドイン--PowerPoint アドイン--新規追加--
で選択してください。アドインが特別な場所にある場合は、信頼するフォルダを登録しておいてください。

後は、保存してあければよいです。

Auto_Close() はありません。Class 側は、ある意味ではローカルモジュールと同じですから、

app_PresentationBeforeClose を選んでください。

If ActivePresentation.Name Like "Test1.p*" Then を入れて、その後に目的のコードを入れてください。

この回答への補足

ご教授ありがとうございます。

ご教授頂いた通りにいろいろと試してみたのですが、うまく動きません。
そこで、下記の件についてご教授願います。

>Auto_Close() はありません。
・・・とありますが、「app_PresentationBeforeClose」を選んだ場合は標準モジュールはどのように設定すればよろしいのでしょうか?
Auto_openのままでよろしいのでしょうか?
度々の質問でお手数をおかけします。

現在、アドイン登録したコードを記述します
'標準モジュール
Public MyClass As Class1
Sub Auto_open()
Set MyClass = New Class1
Set MyClass.app = Application
End Sub

'クラスモジュール
Public WithEvents app As Application

Private Sub app_PresentationBeforeClose(ByVal Pres As Presentation)
If ActivePresentation.Name Like "Test1.ppt" Then '実行するファイルをtest1.pptとした場合
MsgBox "閉じます" 'メッセージボックスに「閉じます」と表示してから閉じる
End If
End Sub

どこか間違っているのでしょうか?
また、小生はパワーポイント2003と使用していますが、2003でも大丈夫でしょうか?
どうぞよろしく御願い致します。

補足日時:2009/09/16 08:28
    • good
    • 0

こんばんは。



PowerPoint で、Auto_Open や Auto_Close は、アドイン型(2003--ppa, 2007-ppam に保存してあげないと、実行されません。

この回答への補足

試しにアドインで保存して、アドインを導入しても動かないようです。
具体的に、上記内容を起動できるようにご指南いただけませんでしょうか。
どうぞよろしく御願い致します。

補足日時:2009/09/14 08:17
    • good
    • 0

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