PowerPoint VBA で図形クリック時に文字列をコピー! HasTextFrame プロパティでテキスト判定 (original) (raw)
PowerPointで図形をクリックした際に、図形内の文字列を自動でクリップボードにコピーできたら便利ですよね? 今回は、知恵袋に寄せられたそんな要望を実現する、PowerPoint VBAのイベント処理を解説します。
ソースコード
' ThisPresentation ぽいイベント処理をクラスモジュールを使用して実現するテスト 'クラスモジュールに記載する 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
動画解説
この動画では、PowerPoint VBAのイベント処理を使って、選択した図形内の文字列をクリップボードにコピーする方法を解説しています。 知恵袋に寄せられた質問を題材に、クラスモジュールと標準モジュールを使ったイベント処理の仕組みから具体的なコードの記述、デバッグ、そして応用まで、丁寧に解説していきます。
ソースコード解説
イベント処理の仕組み
PowerPoint VBAのイベント処理では、特定のイベントが発生した時に、あらかじめ定義しておいた処理を実行することができます。 今回の例では、WindowSelectionChange
イベントを利用して、シェイプが選択されたタイミングでコードを実行するようにしています。
クラスモジュールと標準モジュール
イベント処理を実装するために、クラスモジュールと標準モジュールを連携させて使用します。
- クラスモジュール: イベント処理のコードを記述します。
WithEvents
キーワードで宣言した変数にApplication
オブジェクトをセットすることで、PowerPointのイベントを取得できます。WindowSelectionChange
イベントが発生すると、AppTEST_WindowSelectionChange
プロシージャが呼び出されます。00:06:37 クラスモジュールでのイベント設定
- 標準モジュール: クラスモジュールとアプリケーションを結びつけるコードを記述します。
pp編集開始
プロシージャで、クラスモジュールとApplication
オブジェクトを紐付けます。 09:03 標準モジュールでのイベント処理開始pp編集終了
プロシージャで、イベント処理を無効化します。
Selection.Type
プロパティ
Selection
オブジェクトの Type
プロパティは、選択されているオブジェクトの種類を表す値を返します。 今回のコードでは、スライドや何も選択されていない場合を除外するために、このプロパティを使用しています。22:00 Selection.Type プロパティ
HasTextFrame
プロパティ
Shape
オブジェクトの HasTextFrame
プロパティは、シェイプがテキストフレームを持っているかどうかを判定します。 テキストフレームを持たない図形を選択した際にエラーが発生しないように、このプロパティで判定処理を行っています。35:32 HasTextFrame でテキストの有無を判定
この動画で説明したこと、伝えたかったこと
この動画では、PowerPoint VBAのイベント処理の基本的な仕組みから、具体的なコードの記述、デバッグ、そして応用までを解説しました。 特に、テキストボックス以外の図形にも対応できるようにコードを修正する過程は、VBAの理解を深める上で重要なポイントです。
未解決な問題点、積み残しの課題
- 複数種類のオブジェクト(図形とテキストボックスなど)を同時に選択した際の処理
- 複数のオブジェクトを選択した際に、それぞれのオブジェクトに対して適切な処理を行う必要がある。
- グループ化されたシェイプへの対応
- グループ化されたシェイプを選択した際に、個々のシェイプにアクセスする方法が必要。
これらの課題については、今後の動画で解説していく予定です。
類似処理や参考資料
- スライドショーのイベント処理 02:47 以前のスライドショーの処理を応用
Selection.Type
プロパティ 22:00 Selection.Type プロパティ
今回の動画で解説したイベント処理は、PowerPoint VBAで様々な処理を自動化するための基礎となります。 ぜひ、この動画を参考に、PowerPoint VBAのスキルアップを目指してください!