
No.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
貴重な情報をご教授していただきありがとうございました。
僕の本来のやりたいことは、ファイル毎に2箇所にファイルを保存しバックアップを自動でしたいと言う事から始まりました。
エクセルでは、いろいろな情報を調べてある程度作れたのですがパワーポイントは全く歯が立ちませんでした。
そこで、基本的に閉じる時にアクションをおこせるマクロの作り方が知りたかったのです。
今後は、この動きを(アドインやマクロなど)参考にして完成させたいと思います。
Wendy02さんのデバック方法などを上手に使えるように頑張ります。
また、ファイル名を確認して実行するif文も上記の動きには必要な部分です。Wendy02さんにご教授いただいて私自身のかなりのスキルアップにつながると思いますので感謝しております。
ありがとうございました。
長い期間、貴重な情報と時間をおさき頂いてありがとうございました。
今後、また躓いた際は、どうぞご教授願います。
No.7
- 回答日時:
こんにちは。
>何か手順に誤りがありますでしょうか
最初に、まことに大変にすみません。お恥ずかしい話ですが、私のつづりが違っていました。
オブジェクトエラーが出るはずです。なんといっていいやら、穴があったら入りたいぐらいです。言われてすぐに気がつくべきでした。(自分の書き込みを削除したいぐらいです。(^^;←本当に汗が出てきています。)
訂正後(一文字直せばよいけれども……)
-------------------------------------------
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
と書けばよかったはずですが、少し不安があって書き換えたことが良くありませんでした。
この回答への補足
こちらこそ、コピペしたばかりに気づきませんでした
すみませんでした。
ファイルを閉じる時には閉じますとメッセージがでました。
しかし、パワーポイント本体(アプリケーション)を閉じるとエラーがでます。
できれば、本体を閉じる時も同じようにできたらいいのですが、重ねてご教授願えますでしょうか?
もしも、出来ない場合は本体を閉じる時に別なメッセージを出す(ファイルから閉じましょうなど)を出すことはできますでしょうか?
わがままばかり言って申し訳ございません
怪我の功名で、イベントの書き込み方法等を詳しく教わり有難く思っております。
No.6
- 回答日時:
>上記の確認事項では、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\
次に、メニューから、ツール--アドイン--参照--登録したファイルを選択して登録をしていないとできません。
セキュリティで、信頼できる発行元--組み込み済みのアドインを信頼する
は登録していないといけません。

この回答への補足
いつも、根気強くご教授いただきありがとうございます。
上記操作を行ないました
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が発生します
何か手順に誤りがありますでしょうか
何度も申し訳ございません。
No.5
- 回答日時:
こんにちは。
>閉じるとエラー'424'
>オブジェクトが必要ですと出ます。
アドイン・ファイルの中の
VBEditor のメニュー--挿入--標準モジュールをクリックして、[標準モジュール]を挿入した後に、以下のコードが入れてなくてはなりません。もしかしたら、以下のコードが、同じ場所に入れていませんか?別々の場所です。ややこしいのですが、そういうことになっています。
-------------------------------------------
' 標準モジュール
'-------------------------------------------
Public MyClass As Class1 '← 一番上
Sub Auto_Open()
Set MyClass = New Class1 '←ここがオブジェクトが生成される
Set MyClass.app = Application '*
End Sub
'-------------------------------------------
* 確認するときは、クラス設定されていれば、以下の場所で
Set MyClass. ←ピリオドを入れると、app がポップアップします。
アドインを設定したら、一旦、アプリケーションソフトを一旦終了して、再度立ち上げ、ファイルを開くと、マクロが設定されます。
絵付きのサンプルサイトがあると良いのですが、こういう方法は、あまりありませんので、もう少しがんばってみてください。
この回答への補足
遅くなり申し訳ございません。
何度も綴りなどを確認するのですが、貴殿の言われたとおり入力されているにもかかわらず、同じエラーがでます。
上記の確認事項では、appがポップアップしました。
一生懸命、説明していただいているのに成果が出ておらず申し訳ございません。
No.4
- 回答日時:
こんにちは。
>やはり2003だからでしょうか
そういうことはありません。もう一度、手順を確かめてください。
まず、Class1 モジュールは、VBEditor のメニューの挿入--クラスモジュール(c) をクリックして、
Class モジュールを挿入させます。
その時に、ソフトウェアの一番上の部分で、モジュール名が、「Class1」 となっていることを確認してください。
「Micorosot Visual Basic -********--[Class1(コード)]
**** はファイル名
そして、イベント名を、エディタ・ペイン(白い画面)の上部に以下のように書き込むと、
Public WithEvents app As Application
画像のように、
(General)
app
Class
とありますので、app を選択すると、適当なイベントが出現します。
左側が「app」と出ているところで、今度は、右の窓から、PresnetationClose を選ぶと、正しいイベントが選択されます。
最初にできた不必要なイベントは、削除しておいてください。通常、このようにして、設定されます。

この回答への補足
無知で申し訳ございませんでした。
設定することができました。
そこで、閉じるとエラー'424'
オブジェクトが必要ですと出ます。
次から次へと頼ってばかりで本当に申し訳ございません。
どうぞよろしく御願い致します
No.3
- 回答日時:
こんにちは。
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
'-------------------------------------------
アドインは編集できない場合もありますので、その場合は、コードをすべて入れて、同名のファイル名(アドイン)で上書きしてしまってください。
クラス側のイベント名が正しく入っているかのチェックポイントを図にして入れておきます。

この回答への補足
いつも、アドバイスありがとうございます。
何度もチャレンジしてみるのですが、「WithEvents」が正しくはいりません。
ご指導のクラス側のイベント名チェックポイントの左側にappが入らずに右側にapp_Presnetation Closeと入ってしまいます。
なぜなんでしょうか?
はやり2003だからでしょうか
何度もお手数をおかけしてもうしわけございません。
どうぞよろしく御願い致します。
No.2
- 回答日時:
こんばんは。
> 試しにアドインで保存して、アドインを導入しても動かないようです。
#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でも大丈夫でしょうか?
どうぞよろしく御願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Excel(エクセル) 開いているフォルダを全て閉じる、マクロを教えて下さい 3 2022/08/28 08:42
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAで、ユーザーフォーム...
-
エクセルVBAでシートモジュール...
-
モジュールの最大数はいくつな...
-
モジュールとクラスの違いって...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
エクセルVBA クラスモジュール...
-
標準モジュールを削除したい。(...
-
モジュールからフォームのボタ...
-
変数のことで、、(初心者)
-
VB宣言について
-
RaspberryPi Pico MicroPython...
-
Excel VBA 標準モジュール内で...
-
どのファイルを開いた時もマク...
-
vba userFormのSubを標準モジュ...
-
大量の標準モジュールを解放す...
-
vbaのユーザフォームについて
-
Excelシート内セル記述の違いに...
-
オブジェクトモジュールにメン...
-
VBのフォームモジュールと標準...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで別モジュールへの変数の受...
-
ユーザー定義関数に#NAME?が返...
-
エクセルVBAでシートモジュール...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBAで、ユーザーフォーム...
-
Excel VBA 定義されたプロージ...
-
VBでグローバル変数を宣言するには
-
vba userFormのSubを標準モジュ...
-
モジュールの最大数はいくつな...
-
【vba】フォームに書いてあ...
-
Excel VBA 『Call』で呼び出す...
-
VBAで旧字体を異字体に一括で変...
-
モジュールとクラスの違いって...
-
モジュールからフォームのボタ...
-
大量の標準モジュールを解放す...
-
acwzlibとは?
-
SendKeysの使い方について
-
標準モジュールを削除したい。(...
-
VBA This Workbookモジュール...
-
VBA モジュールで共通に使う変...
おすすめ情報