• 締切済み

PowerPointVBAについて確認させてくださ

PowerPointVBAについて確認させてください。 PowerPointのテキストボックスにあるテキストをC:\DebugPrint.Logに出力するプログラムを作成しようとしています。 下記のコードを実行したところ、下記の8行目の「Debug.Print shape.TextFrame.TextRange.Text」の箇所で「指定された値は境界を超えています。」とエラーメッセージが出ます。 解決方法を御教授いただければと思います。 Const g_strLogFile = "C:\DebugPrint.Log" Sub TextBoxToDebugPrint() Dim slide For Each slide In ActiveWindow.Parent.Slides Dim shape For Each shape In slide.Shapes Debug.Print shape.TextFrame.TextRange.Text Next Next End Sub ' デバッグ文字列の出力 Function DebugPrint(ByVal strData As String) ' Debug.Print strData Open g_strLogFile For Append As #1 Print #1, strData Close #1 End Function

みんなの回答

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

ところで、DebugPrintではなく、Debug.Print になっているのは良いの? このままだとログファイルではなく、イミディエイトウィンドウにしか出力しませんよ。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

ソースをみると全てのシェイプからテキストを取り出そうとしていますが、テキストボックス以外のシェイプがあるのでは? 例えば画像とか。 シェイプがテキストボックスの時だけ取り出すようにすればよいと思います。 Debug.Print shape.TextFrame.TextRange.Text ↓ If shape.Type = msoTextBox Then   Debug.Print shape.TextFrame.TextRange.Text End If

関連するQ&A

  • パワーポイントVBAで

    http://q.hatena.ne.jp/1144314367 これと同じような事をしたくて、 Sub TextBoxToDebugPrint() Dim slide For Each slide In ActiveWindow.Parent.Slides Dim shape For Each shape In slide.Shapes Debug.Print shape.TextFrame.TextRange.Text Next Next End Sub を張り付けたのですが、一部の文字は取得できますが、 実行時エラー -2147024809 指定された値は境界を超えています。 と言うエラーが発生し、止まってしまいます。 どもオブジェクトがどういう意味のエラーを出してるのかわからないのですが どういう意味でしょうか?

  • Excel VBA テキストボックスの値の取得

    テキストボックスの値が必要となり参照しようと思い、検索したところdebug.printにある3つの方法がヒットし、試して見ましたが、エラーになります。 テキストボックスの名前にはどれもtxtの文字を含んでいます。 Sub ShapeValue() Dim Shp As Shape For Each Shp In ActiveSheet.Shapes If InStr(Shp.Name, "txt") <> 0 Then Debug.Print Shp.TextFrame.Characters.Text 'オブジェクトは、このプロパティまたはメソッドをサポートしていません。 Debug.Print Shp.TextFrame2.TextRange.Text '指定された値は境界を超えています。 Debug.Print Shp.ShapeRange.TextFrame.Characters.Text 'オブジェクトは、このプロパティまたはメソッドをサポートしていません End If Next Shp End Sub どうすれば取得できるでしょうか?

  • スライド内のオブジェクトを消すマクロ

    PowerPointのVBAマクロで、スライド中にspaceという文字列のみのテキストボックス以外のオブジェクトを消すマクロを以下のように作成したのですが、このマクロを実行しても、いくつかのオブジェクトが残ってしまいます。 Sub foo()  Dim f As Boolean  Dim sl As Slide  Dim sh As Shape   For Each sl In ActivePresentation.Slides    For Each sh In sl.Shapes     If sh.HasTextFrame Then         If sh.TextFrame.TextRange.Text <> "space" Then             sh.Delete         End If     End If    Next   Next End Sub コレクションをFor eachで回しているので、漏れはないはずなのですが、どなたか原因・対策をご教示いただけないでしょうか?

  • VBA超初心者です。

    プログラミング超初心者です。 下のは、pptxのスライド1枚目に表示されているすべての文字・色・大きさを1文字ずつ取ってくるマクロです。 これを改造して、 (1)pptxファイル内のすべてのスライドに対して (2)"文字 色 大きさ"の形式で (3)結果をテキストファイルに書き出す(スライド1枚につきテキストファイル1つでも、全部まとめてテキストファイル1に書き出すでもOK)(さらにシェイプ毎に分かれてくれたら尚嬉しい) にはどうすればいいのでしょうか? 改造後のソースを書いてくれると助かります。注文の多い我儘な質問ではありますが、よろしくお願いします。 ------------------------------------------------------------ Sub Sample1() '1文字ずつ文字情報取得 Dim myShape As Shape Dim myCharacter As Object 'スライド1のシェイプを処理 For Each myShape In ActivePresentation.Slides(1).Shapes With myShape 'テキストがあるシェイプを処理 If .TextFrame.HasText Then For Each myCharacter In .TextFrame.TextRange.Characters MsgBox "テキスト:" & myCharacter.Text & vbCrLf & _ "フォントカラー:" & myCharacter.Font.Color & vbCrLf & _ "フォントサイズ:" & myCharacter.Font.Size Next End If End With Next End Sub --------------------------------------------------------------

  • アウトラインに表示されている文字 取得したいのです

    アウトラインに表示されている文字(タイトル?)のみ取得したいのですが、 Dim sld As Slide Dim shp As Shape Sub test() For Each sld In ActivePresentation.Slides sld.Select For Each shp In ActiveWindow.Selection.SlideRange.Shapes Debug.Print shp.TextEffect.Text Next shp Next sld End Sub を実行すると、アウトラインだけではなく、 テキストボックスにあるすべての値まで取得してしまいます。 アウトラインのタイトル部分のみ表示される文字を取得するコードはありますか? 「クリックしてタイトルを入力」 「・クリックしてテキストを入力」 とスライドにデフォルトで表示されますが、 「クリックしてタイトルを入力」のみの値を取得したいです。

  • どちらを使った方がいいでしょうか?

    Sub test1() Dim ws As Worksheet For Each ws In Worksheets Debug.Print ws.Name Next End Sub Sub test2() Dim ws As Variant For Each ws In Worksheets Debug.Print ws.Name Next End Sub どちらも問題なく実行されますが、 VBA的にどちらを使った方がいいでしょうか?

  • エクセルVBAでテキストボックスに文字

    Excel2016です。 ワークシート上に配置した、図形の「テキストボックス」に文字を入れるVBAについての質問です。 下記のTEST01では期待通り文字が入りますが、これはテキストボックスをSelectしなければなりません。 TEST02ならSelectせずにOKかと思ったら実行時エラーとなりました。 どのように修正したらよろしいのでしょうか? Sub TEST01()   Sheets(“Sheet1”).Shapes.Range(Array("TextBox 3")).Select   Selection.ShapeRange.TextFrame2.TextRange.Characters.Text = "TEST/TEST/2020"   Selection.ShapeRange.TextFrame2.TextRange.Font.Name = "Meiryo UI"   Selection.ShapeRange.TextFrame2.TextRange.Font.Bold = msoTrue End Sub Sub TEST02()   With Sheets(“Sheet1”).Shapes.Range(Array("TextBox 3"))     .ShapeRange.TextFrame2.TextRange.Characters.Text = "TEST/TEST/2020"     .ShapeRange.TextFrame2.TextRange.Font.Name = "Meiryo UI"     .ShapeRange.TextFrame2.TextRange.Font.Bold = msoTrue   End With End Sub

  • 変数が増えてしまうのはなぜだか教えてください。

    こんにちは、マクロ初心者ではないつもりですが、基本ができていないのか、以下のSubで、変数の値が増えてしまいます。i = 3のままだと思っていたのですが、シートが移動するにつれてiの値が増えてしまうのは何故でしょうか。教えてください。 Sub tes() Dim i As Integer Dim ws As Worksheet i = 3 Debug.Print i For Each ws In Worksheets ws.Select For i = 1 To i Debug.Print i Cells(i, i) = i Next Next End Sub 新規のブックに書きました。Sheetは1~3です。

  • vbaコードが遅い

    当方access2003、XP、メモリ2G、コア2DUOなのですが Sub 取得() Dim DB As DAO.Database Dim T As TableDef Set DB = CurrentDb Debug.Print "開始:" & Now For Each T In DB.TableDefs 'ここでやたら時間がかかる Debug.Print T.Name & "取得時間:" & Now Next End Sub これを実行すると、 For Each T In DB.TableDefs を通る時に5秒くらい時間がかかりますがそういうものなのでしょうか?

  • テキストボックスかコンボボックスを条件としたい

    フォーム上のコントロールを取得する時に、 「テキストボックスかコンボボックスなら」としたいのですが、VBAコードがわかりません。 ************************************************************ Sub Sample() Dim myCtrl As Control Dim myForm As String myForm = "フォーム1" For Each myCtrl In Forms(myForm).Controls If myCtrlのタイプがテキストボックス Or コンボボックス Then Debug.Print myCtrl.Name End If Next End Sub ************************************************************ に修正していただけますか? ControlType プロパティを使うと思うのですが、使い方がわかりません。 ご回答よろしくお願いします。

専門家に質問してみよう