三流君 ken3のmemo置き場

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

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
Ken3三流君の連絡先:
[google formsで連絡する]
上記の問い合わせフォームに質問・感想など気軽に書き込んでください

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

PowerPoint VBA で図形クリック時に文字列をコピー! HasTextFrame プロパティでテキスト判定

PowerPoint VBAで図形選択時に文字列をコピー!イベント処理を徹底解説

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 クラスモジュールでのイベント設定
  • 標準モジュール: クラスモジュールとアプリケーションを結びつけるコードを記述します。

Selection.Type プロパティ

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

HasTextFrame プロパティ

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

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

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

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

  • 複数種類のオブジェクト(図形とテキストボックスなど)を同時に選択した際の処理
    • 複数のオブジェクトを選択した際に、それぞれのオブジェクトに対して適切な処理を行う必要がある。
  • グループ化されたシェイプへの対応
    • グループ化されたシェイプを選択した際に、個々のシェイプにアクセスする方法が必要。

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

類似処理や参考資料

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

ランダムな占い

再生リスト:[占い 今日のラッキーカラー]をショート動画

Ken3 ホームページ 目次

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

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



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