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つが挙げられます
デバッグの前に、プログラムの仕様を理解すること
デバッグの前に、プログラムのコードを読み込むこと
デバッグの前に、プログラムの入力値を確認すること
デバッグの際に、デバッグ情報を出力すること
デバッグが終わったら、デバッグ情報を削除すること以上が、プログラミングのデバッグにおいて役立つコツです。
もし、他に何か質問があれば、お答えいたします。