三流君 ken3のmemo置き場

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

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

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

PowerPoint VBA 箇条書き ParagraphFormat.Bulletプロパティを使ってみた

PowerPoint VBA で 箇条書きを設定したかったので、探ってみました。
ParagraphFormat.Bullet プロパティを探ってみてください。

タイトル

youtu.be
https://youtu.be/iLzfaqJvCmY
目次
00:00 実行結果
00:51 0.段落オブジェクトの下 Bulletで箇条書きの設定ができそうです。
01:20 1.選択されたテキストを箇条書きにしてみた
04:49 2.Character = &H2022 を Ascにしたかったけどエラー・・・
06:00 3..RelativeSize = 0.5 じゃないよなぁ・・・
08:03 4.変数を分割した方がわかりにくいな、まとめて書こうぜ
11:00 5.おわりの挨拶 アレンジして使ってみてください。

0.段落オブジェクトの下 Bulletで箇条書きの設定ができそうです。

キッカケ:
detail.chiebukuro.yahoo.co.jp

>パワーポイントのVBAで下記を実行するコードを教えて下さい。
>1.選択されたテキストボックス内を箇条書きにする。(箇条書きの点のスタイルは「・」)
>2.箇条書きのインデントの幅(Y)を0.5にする。

ParagraphFormat.Bullet プロパティ (PowerPoint)
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.paragraphformat.bullet

↑ここが、怪しそうです。

BulletFormat オブジェクト (PowerPoint)
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.bulletformat

BulletFormat.Type プロパティ (PowerPoint)
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.bulletformat.type

PpBulletType 列挙 (PowerPoint)
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.ppbullettype
行頭文字の種類を指定します。

名前 値 説明
ppBulletMixed -2 混在
ppBulletNone 0 行頭文字なし
ppBulletNumbered 2 番号付き
ppBulletPicture 3 イメージ付き
ppBulletUnnumbered 1 番号なし

1.選択されたテキストを箇条書きにしてみた

Selection.Type が ppSelectionText かチェックして、
TextRangeの下
.ParagraphFormatで、
.Bullet ↑段落の箇条書きまで、たどり着き、

下記プロパティをセットして、
.Type = ppBulletUnnumbered '箇条書き 数値無しにして頭は指定文字
.Character = &H2022 '「・」の文字コード 16進で頭を指定 調べるよりもAscがいいのか?
箇条書きを作成してみた。

BulletFormat.Character プロパティ (PowerPoint)
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.bulletformat.character
指定されたテキストの行頭文字に使用する Unicode 文字コードを設定します。 値の取得と設定が可能です。

文字コード 中点
'選択されたテキストを判断
Sub pp選択Textを探る20230612_001箇条書きを作る()

    Debug.Print "Selection.Type =", ActiveWindow.Selection.Type
    If ActiveWindow.Selection.Type <> ppSelectionText Then  'テキストを部分選択
        MsgBox "ボックス内のテキストを部分選択してね"
        Exit Sub
    End If
    
    Dim ppTextRange As PowerPoint.TextRange  'テキスト範囲
    Set ppTextRange = ActiveWindow.Selection.TextRange '選択範囲を代入
    
    Dim ppPFormat   As PowerPoint.ParagraphFormat  '段落フォーマット
    Set ppPFormat = ppTextRange.ParagraphFormat    '選択された範囲の段落フォーマット
    
    With ppPFormat.Bullet  '段落フォーマットの箇条書き.Bullet を設定
        .Visible = msoTrue
        .Type = ppBulletUnnumbered  '箇条書き 数値無しにして頭は指定文字
        .Character = &H2022         '「・」の文字コード 16進で頭を指定 調べるよりもAscがいいのか?
    End With

End Sub

2. .Character = &H2022 を Ascにしたかったけどエラー・・・

.Character = &H2022 と直値でセットしていたので、
.Character = Asc("・") とやってみたけど、失敗した話。
※なんだろう?

実行時エラー

実行時エラー '-2147024809(80070057)':
指定された値は境界を超えています。


3..RelativeSize = 0.5 じゃないよなぁ・・・

>箇条書きのインデントの幅(Y)を0.5にする。

.RelativeSize じゃない気がするけど、テスト

BulletFormat.RelativeSize プロパティ (PowerPoint)
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.bulletformat.relativesize
段落の最初の文字の大きさに対する行頭文字の大きさを取得または設定します。 値の取得と設定が可能です。

'選択されたテキストを判断
Sub pp選択Textを探る20230612_003箇条書きRelativeSize()

    Debug.Print "Selection.Type =", ActiveWindow.Selection.Type
    If ActiveWindow.Selection.Type <> ppSelectionText Then  'テキストを部分選択
        MsgBox "ボックス内のテキストを部分選択してね"
        Exit Sub
    End If
    
    Dim ppTextRange As PowerPoint.TextRange  'テキスト範囲
    Set ppTextRange = ActiveWindow.Selection.TextRange '選択範囲を代入
    
    Dim ppPFormat   As PowerPoint.ParagraphFormat  '段落フォーマット
    Set ppPFormat = ppTextRange.ParagraphFormat    '選択された範囲の段落フォーマット
    
    With ppPFormat.Bullet  '段落フォーマット箇条書きを設定
        .Visible = msoTrue
        .Type = ppBulletUnnumbered  '箇条書き 数値無しにして頭は指定文字
        .Character = &H2022         '「・」の文字コード 16進で頭を指定 調べるよりもAscがいいのか?
        .RelativeSize = 0.5         '相対的なサイズじゃないよなぁ・・0.5にする。
    End With

End Sub

4.変数を分割した方がわかりにくいな、まとめて書こうぜ

下記のように1つ1つ下に代入していきましたが、
Set ppTextRange = ActiveWindow.Selection.TextRange '選択範囲を代入
Set ppPFormat = ppTextRange.ParagraphFormat '選択された範囲の段落フォーマット
With ppPFormat.Bullet '段落フォーマット箇条書きを設定

これよりも、まとめて書いた方がわかりやすかったり・・・
Set ppTextRange = ActiveWindow.Selection.TextRange '選択範囲を代入
With ppTextRange.ParagraphFormat.Bullet '段落フォーマット箇条書きを設定

いや、最終的に、これ?かな?
With ActiveWindow.Selection.TextRange.ParagraphFormat.Bullet '段落フォーマット箇条書きを設定


5.おわりの挨拶

こんな感じで、探ってみました。
アレンジして使ってみてください。

'選択されたテキストを判断
'箇条書きを作る
Sub pp選択Textを探る20230612_005箇条書き作成()

    Debug.Print "Selection.Type =", ActiveWindow.Selection.Type
    
    Dim ppTextRange As PowerPoint.TextRange  'テキスト範囲
    Set ppTextRange = Nothing
    
    If ActiveWindow.Selection.Type = ppSelectionShapes Then    'シェイプ テキストボックスなど
        Set ppTextRange = ActiveWindow.Selection.ShapeRange(1).TextFrame.TextRange
    End If
    
    If ActiveWindow.Selection.Type = ppSelectionText Then   'テキストを部分選択
        Set ppTextRange = ActiveWindow.Selection.TextRange '選択範囲を代入
    End If
    
    If ppTextRange Is Nothing Then
        MsgBox "選択エラー"
        Exit Sub
    End If
   
    Dim ppPFormat   As PowerPoint.ParagraphFormat  '段落フォーマット
    Set ppPFormat = ppTextRange.ParagraphFormat    '選択された範囲の段落フォーマット
    
    With ppPFormat.Bullet  '段落フォーマット箇条書きを設定
        .Visible = msoTrue
        '.Type = ppBulletUnnumbered  '箇条書き 数値無しにして頭は指定文字
        '.Character = &H2022         '「・」の文字コード 16進で頭を指定 調べるよりもAscがいいのか?
        .Type = ppBulletNumbered
        .StartValue = 1
        .RelativeSize = 1.5           '相対的なサイズ テスト 1.5にする。
    End With

End Sub


デバッグのコツを5つGPTに聞いてみた

プログラミングのデバッグにおいて、コツとして以下の5つが挙げられます

デバッグの前に、プログラムの仕様を理解すること
デバッグの前に、プログラムのコードを読み込むこと
デバッグの前に、プログラムの入力値を確認すること
デバッグの際に、デバッグ情報を出力すること
デバッグが終わったら、デバッグ情報を削除すること

以上が、プログラミングのデバッグにおいて役立つコツです。
もし、他に何か質問があれば、お答えいたします。

Ken3 ホームページ 目次

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

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



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