質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

1143閲覧

パワーポイントのマクロのエラーについて

geech

総合スコア9

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/12/18 07:22

編集2021/12/18 08:01

パワーポイントのマクロを作っていて手詰まりました。

◆作りたいもの
PPTのテキストボックス6からページ番号を読み取って、それに対応したテキストファイルを読み込んでテキストボックス5へ入れる

Sub Sample2() Dim buf As String Dim pge As String Dim sld As Slide, shp As Shape For Each sld In ActivePresentation.Slides For Each shp In sld.Shapes With shp If shp.Name = "テキスト ボックス 6" Then pge = "ppt_" & shp.TextFrame.TextRange.Text & ".txt" End If End With Next shp With CreateObject("Scripting.FileSystemObject") With .GetFile(pge).OpenAsTextStream buf = .ReadAll .Close End With End With For Each shp In sld.Shapes If shp.Name = "テキスト ボックス 5" Then shp.TextFrame.TextRange.Text = buf End If Next shp Next sld End Sub

With .GetFile(pge).OpenAsTextStream で「実行時エラー5」になります。

エラー箇所を抜き出してその部分だけ実行するとエラーになりません。
一体何が問題なのかご教示いただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cx20

2021/12/18 07:38

とりあえず、VBAのコードの先頭に ----------------------------- Option Explicit ----------------------------- を追加してみて下さい。
geech

2021/12/18 07:54

変数名に間違いがあったところを修正いたしました。 Option Explicit を追加しましたが、実行時エラー5に変化はありませんでした。
cx20

2021/12/18 07:55

実行時エラーの箇所について、再度確認してみて下さい。 CreateObject("Scripting.FileSystemObject")  の箇所ではエラーにならないと思います。
geech

2021/12/18 08:02

おっしゃる通り間違えてました。正しくは With .GetFile(pge).OpenAsTextStream の部分です。
guest

回答1

0

ベストアンサー

With CreateObject("Scripting.FileSystemObject") で「実行時エラー5」になります。

エラー箇所、そこではないと思います。

VB

1With CreateObject("Scripting.FileSystemObject") 2 With .GetFile(pge).OpenAsTextStream 3 buf = .ReadAll 4 .Close 5 End With 6End With 7

上記のコードですが、With を使わずに書くと以下のようになります。
このコードで実行してみて、どこでエラーになっているのか確認してみて下さい。

VB

1Dim fso 2Set fso = CreateObject("Scripting.FileSystemObject") 3 4Dim file 5Set file = fso.GetFile(pge) 6 7Dim stream 8Set stream = file.OpenAsTextStream 9 10buf = stream.ReadAll 11stream.Close

投稿2021/12/18 07:52

cx20

総合スコア4633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

geech

2021/12/18 07:58

Set file = fso.GetFile(pge) の部分で「実行時エラー5」になります。
cx20

2021/12/18 08:15 編集

はい。それが原因です。 GetFile() は 指定されたファイルが存在しない場合にエラーになります。 ■ GetFile メソッド (Visual Basic for Applications) https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/getfile-method 「pge」に何が設定されているかデバッグ実行して確認してみて下さい。 変数をウォッチするか、Debug.Print を使うとことで変数の中身がイミディエイトウィンドウに表示されるので確認することが出来るかと思います。 ------------------------------------- Debug.Print "ファイル名:" & pge -------------------------------------
geech

2021/12/18 08:16

おかげさまで理由が判りました。 最初にマクロを作成した時は全ページ「テキスト ボックス 6」がある状態だったので問題なく動いていた。 しかし、1ページ目にそれが無い状態のページを追加したために、pgeに値が入らなくなりエラーとなった。 ヒントをいただきありがとうございます。 一人で煮詰まっていたので大変助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問