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 イベントを利用して、シェイプが選択されたタイミングでコードを実行するようにしています。

クラスモジュールと標準モジュール

イベント処理を実装するために、クラスモジュールと標準モジュールを連携させて使用します。

Selection.Type プロパティ

Selection オブジェクトの Type プロパティは、選択されているオブジェクトの種類を表す値を返します。 今回のコードでは、スライドや何も選択されていない場合を除外するために、このプロパティを使用しています。22:00 Selection.Type プロパティ

HasTextFrame プロパティ

Shape オブジェクトの HasTextFrame プロパティは、シェイプがテキストフレームを持っているかどうかを判定します。 テキストフレームを持たない図形を選択した際にエラーが発生しないように、このプロパティで判定処理を行っています。35:32 HasTextFrame でテキストの有無を判定

この動画で説明したこと、伝えたかったこと

この動画では、PowerPoint VBAのイベント処理の基本的な仕組みから、具体的なコードの記述、デバッグ、そして応用までを解説しました。 特に、テキストボックス以外の図形にも対応できるようにコードを修正する過程は、VBAの理解を深める上で重要なポイントです。

未解決な問題点、積み残しの課題

これらの課題については、今後の動画で解説していく予定です。

類似処理や参考資料

今回の動画で解説したイベント処理は、PowerPoint VBAで様々な処理を自動化するための基礎となります。 ぜひ、この動画を参考に、PowerPoint VBAスキルアップを目指してください!