前提・実現したいこと
パワーポイント(for Mac 2016)において、全スライド・オブジェクトに対して、テキスト検索・変換するコードを作成しています。
反復して同一の構文を書かなければいけない部分を、なんとか1回の記載で済むようにできないかと模索しています。
少しわかりにくいですが、マクロのVBAで、For構文、If構文内の入れ子構造の下層(中身)部分が、
並列するFor/If構文の下層と共通しており、
かつ今後の経過で下層部分のみ書き換える可能性が高い場合、
同一構文は1回書くだけにした方が効率的です。
具体的には、以下の通りです。
該当のソースコード
VBA
1Option Explicit 2Sub 下付き文字にするコード例() 3Dim pos As Long 4Dim Strnum As Long 5Dim RepList() As Variant 6Dim sld 7Dim shp 8Dim txt As String 9 RepList = Array(“●”, “●”, “●") 10 11For Each sld In ActivePresentation.Slides 12 For Each shp In sld.Shapes 13 If shp.TextFrame.HasText Then ‘通常のテキストボックスの場合 ① 14 txt = shp.TextFrame2.TextRange.Text '元テキスト内容を一旦格納 15 For i = 0 To 2 ‘★ 16 Strnum = 1 17 While InStr(Strnum, txt, RepList(i), vbBinaryCompare) > 0 18 pos = InStr(Strnum, txt, RepList(i), vbBinaryCompare) 19 shp.TextFrame2.TextRange.Characters(pos + 1).Font.Subscript = msoTrue 20 Strnum = Strnum + 2 21 Wend 22 Next i ‘★★ 23 End If 24 25 If shp.HasTable Then ‘テーブル内の場合 ② 26 For Each clm In shp.Table.Columns 27 For Each cl In clm.Cells 28 txt = cl.Shape.TextFrame2.TextRange.Text 29 上記★〜★★が共通 30 Next cl 31 Next clm 32 End If 33 34 Next shp 35Next sld 36End Sub
①変換対象がテキストボックス内の場合と、②表テーブル内のセルで場合とで、中身の動作は★〜★★で共通しています。
その★〜★★部分のみ今後変更する可能性がある場合、書き換える部分が多いほど煩雑になるし、構文エラーのリスクも高まります。
試したこと
浅学ですが、Call構文→Private Sub()で
★〜★★部分を抽出してみましたが、
「オブジェクトの指定が必要」などと表示され、Subプロシージャを単純に分けるとうまくいかないようでした。
エラーの種類
・Call→ Private Sub() ()は空欄
→「変数が定義されていません」
・Call→ Private Sub(ByVal Strnum As Long, txt As String, RepList() As Variant, pos As Long)
→構文全体が青くなり、エラー表示はされないがエラー音が鳴って何も起こらない
・Call→ Function(ByVal Strnum As Long, txt As String, RepList() As Variant, pos As Long)
→エラー表示はされないが、エラー音が鳴って何も起こらない
・txt = she. 〜〜 をPrivate Subに入れないようにすると、「オブジェクトの指定が必要」のエラーは無くなりました。
補足情報(FW/ツールのバージョンなど)
Mac OS Mojave
Microsoft Office Powerpoint for Mac ver 15.33
回答2件
あなたの回答
tips
プレビュー