三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

PowerPoint VBA イベント処理 WithEventsでWindowSelectionChangeのイベント・タイミングで処理を行う

要約:PowerPointのイベント処理について説明しています。具体的には、`WithEvents`を使用してイベントを処理する方法、新しいスライドが挿入された時やプレゼンテーションが保存されたタイミングでのイベント処理、そして選択されたシェイプ内の文字列をクリップボードにコピーする方法についてライブデバッグを通じて解説しています。

#PowerPointVBA #WithEvents #イベント #マクロ #パワーポイント #シェイプの選択 #VBA #PowerPoint

www.youtube.com
https://www.youtube.com/watch?v=QT5r3169fWg
目次
00:00 1.やりたいことを説明
01:40 2.PowerPointのイベント処理 WithEvents設置方法
06:27 Public WithEvents AppTEST As Application
07:46 PresentationNewSlide(ByVal Sld As Slide) 新しいスライドが挿入された時
09:03 標準モジュールでクラスモジュールとアプリをつなげてイベントを実行する
14:57 PresentationSave(ByVal Pres As Presentation) 保存のタイミングをテスト
16:46 2.1 本題:シェイプ選択のタイミングをチェック WindowSelectionChange(ByVal Sel As Selection)
18:51 2.2 他の回答を参考にする おいおい・・・
22:00 2.3 Selection.Type プロパティ で選択された種類をチェックしないとエラーが発生する
32:58 2.4 図形内の文字列を取得したいので HasTextFrame でテキストの存在を判断する
40:56 再度ソースの設置方法 と 簡単な解説

1.やりたいことを説明

知恵袋の質問にチャレンジしてみます。

detail.chiebukuro.yahoo.co.jp

パワーポイント VBAについて質問です。
図形を選択して、その図形に記入されている内容(文字)をクリップボードにコピーをするようなマクロはどのように作ればよろしいでしょうか?
複数合ってもできますか?

編集画面で、選択されたシェイプ内の文字列をクリップボードにコピー

他の回答が付いているが、
たぶん、イベント処理の記述がわからない?感じなので、
かってに、ライブでデバッグしてみる・・・

2.PowerPointのイベント処理 WithEvents設置方法
01:40 https://www.youtube.com/watch?v=QT5r3169fWg&t=100

昔、スライドショーでやった、イベント処理があるので
ken3memo.hatenablog.com
↑を参考にする
※これを宣伝したかっただけ・・・おいおい。

Public WithEvents AppTEST As Application
06:27 https://www.youtube.com/watch?v=QT5r3169fWg&t=387
クラスモジュールにイベント処理を書く

07:46 PresentationNewSlide(ByVal Sld As Slide) 新しいスライドが挿入された時

Private Sub AppTEST_PresentationNewSlide(ByVal Sld As Slide)
  MsgBox "PresentationNewSlide"
End Sub

標準モジュールでクラスモジュールとアプリをつなげてイベントを実行する
09:03 https://www.youtube.com/watch?v=QT5r3169fWg&t=543

Dim X As New EventSELECT
Sub pp編集開始()  '↑クラスモジュールとアプリをリンクしてイベント処理
   Set X.AppTEST = Application  'イベントを拾えるように代入
   '↑クラスモジュール EventSELECT 内で、
   'WithEvents AppTEST As Application で定義しているので、開始時に代入
End Sub

PresentationSave(ByVal Pres As Presentation) 保存のタイミングをテスト
14:57 https://www.youtube.com/watch?v=QT5r3169fWg&t=897

Private Sub AppTEST_PresentationSave(ByVal Pres As Presentation)
    MsgBox "保存のタイミング"
End Sub

2.1 本題:シェイプ選択のタイミングをチェック WindowSelectionChange(ByVal Sel As Selection)
16:46 https://www.youtube.com/watch?v=QT5r3169fWg&t=1006
WindowSelectionChangeなど、タイミングをチェックする
(ライブ前にやったので、正解を書いたけど、いろいろなイベントがある)

2.2 他の回答を参考にする おいおい・・・
18:51 https://www.youtube.com/watch?v=QT5r3169fWg&t=1131
同じような処理になると思うので、
他の回答を引用して作成する
※終了予定が、不具合を見つけて焦る三流プログラマー・・・

2.3 Selection.Type プロパティ で選択された種類をチェックしないとエラーが発生する
22:00 https://www.youtube.com/watch?v=QT5r3169fWg&t=1320

https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.selection.type

ppSelectionNone
ppSelectionShapes
ppSelectionSlides
ppSelectionText

2.4 図形内の文字列を取得したいので HasTextFrame でテキストの存在を判断する
32:58 https://www.youtube.com/watch?v=QT5r3169fWg&t=1978

    If shp.HasTextFrame = msoTrue Then 'テキストアリを判断する
        shp.TextFrame.TextRange.Copy
        Debug.Print shp.TextFrame.TextRange.Text
    Else
        Debug.Print "テキストを持ってません"
    End If

3.おわりの挨拶
こんな感じで、パワポの編集画面のイベント処理もできるので、
やってみてください。

40:56 コードの設置方法
https://www.youtube.com/watch?v=QT5r3169fWg&t=2456
↑に設置方法載せました、下記↓のソースコードを設置してテストしてみてください。

クラスモジュールに記載 クラスモジュール名をEventSELECTにする

Option Explicit

Public WithEvents AppTEST As Application

Private Sub AppTEST_WindowSelectionChange(ByVal Sel As Selection)
    Debug.Print Now(), "TYPE=", Sel.Type
    
    Dim shp As Shape

    If Sel.Type = ppSelectionNone Or Sel.Type = ppSelectionSlides Then 'まずシェイプ以外なら抜ける
        Exit Sub
    End If

    If Not Sel.ShapeRange.Count = 1 Then 'コピーは1つ
        Exit Sub
    End If
    
    Set shp = Sel.ShapeRange(1)
    
    If shp.HasTextFrame = msoTrue Then 'テキストアリを判断する
        shp.TextFrame.TextRange.Copy
        Debug.Print shp.TextFrame.TextRange.Text
    Else
        Debug.Print "テキストを持ってません"
    End If
    
End Sub

標準モジュールに記載

Option Explicit

Dim X As New EventSELECT

Sub pp編集開始()  '↑クラスモジュールとアプリをリンクしてイベント処理

   Set X.AppTEST = Application  'イベントを拾えるように代入
   '↑クラスモジュール EventSELECT 内で、
   'WithEvents AppTEST As Application で定義しているので、開始時に代入

End Sub

Sub pp編集終了()
    
   Set X.AppTEST = Nothing  'イベントとのつながりを切る
   
End Sub



WithEventsの過去記事:
ken3memo.hatenablog.com
ken3memo.hatenablog.com
ken3memo.hatenablog.com
ken3memo.hatenablog.com



1. **要約**:
このビデオでは、PowerPointのイベント処理について説明しています。具体的には、`WithEvents`を使用してイベントを処理する方法、新しいスライドが挿入された時やプレゼンテーションが保存されたタイミングでのイベント処理、そして選択されたシェイプ内の文字列をクリップボードにコピーする方法についてライブデバッグを通じて解説しています。

2. **キーワード**:
PowerPoint, イベント処理, WithEvents, クラスモジュール, テキストコピー, ライブデバッグ, ソースコード, `WindowSelectionChange`, `HasTextFrame`, `Selection.Type`

3. **YouTubeタイトル案**:
- PowerPointでのイベント処理完全ガイド
- ライブデバッグで学ぶPowerPointイベント処理
- PowerPointのシェイプ選択イベントをマスターする

4. **似ている単語のペア**:
- PowerPointパワポ
- イベント処理とイベントハンドリング
- クラスモジュールとクラスモジュール
- テキストコピーとテキスト複製
- ライブデバッグとリアルタイムデバッグ
- ソースコードソースコード
- `WindowSelectionChange`とウィンドウ選択変更
- `HasTextFrame`とテキストフレーム有無
- `Selection.Type`と選択タイプ


イラストプロンプト:
漫画イラストで描いてください 赤い髪の男女がプログラムコードを見て悩んでいます
※オレンジ・赤?のパワーポイントのカラーを表現してみた・・・

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)