teratail header banner
teratail header banner
質問するログイン新規登録
VBA

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

Q&A

解決済

1回答

3902閲覧

Wordファイルの文字検索(VBA)

taakfue

総合スコア5

VBA

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

0グッド

0クリップ

投稿2021/10/21 21:42

0

0

前提・実現したいこと

エクセルVBAを用い、特定のフォルダに存在するWordファイルを開き、Wordファイル中の文字を検索した後、結果をエクセル(B列)に記入するマクロを組もうとしています。検索する文字はあらかじめエクセルファイル(A列)に記載しておくようにしております。

発生している問題・エラーメッセージ

 指定したフォルダ中のワードファイルを開くところまでは出来ているのですが、文字検索を実行するところでエラーが発生して進めることが出来ない状態です。マクロを実行すると「オブジェクトはこのプロパティまたはメソッドをサポートしていません」と表示されます。
恐らくコード中の変数「objDoc」の型が不適切なのだろうと予測しているのですが、どのように変更すればよいか分かりません。どう修正すればよいかご教示ください。

「オブジェクトはこのプロパティまたはメソッドをサポートしていません」 また、エラーが表示された際、「デバック」ボタンを押すと 「For i = 1 To MaxRow」の下のコード 「.Selection.Find.ClearFormatting」が黄色く塗りつぶされ、エラーの該当箇所になります。

該当のソースコード

番号リストSub ワードファイル開いて検索() Dim fso As FileSystemObject Set fso = New FileSystemObject Dim fl As Folder Set fl = fso.GetFolder("フォルダのURL") ' フォルダを指定 Dim objWord As Word.Application Set objWord = CreateObject("Word.Application")objWord.Visible = True Dim objDoc As Document Dim f As File For Each f In fl.Files ' フォルダ内のファイルを取得 Set objDoc = objWord.Documents.Open(f.Path) Dim i As Long, MaxRow As Long Dim P As Long, L As Long ' Excel側 Sheet1 A列で最終行を確認 MaxRow = ThisWorkbook.Worksheets("Sheet1"). _ Range("A" & Rows.Count).End(xlUp).Row Application.ScreenUpdating = False With objDoc For i = 1 To MaxRow .Selection.Find.ClearFormatting .Selection.HomeKey Unit:=wdStory ' 検索するキーワードを設定します .Selection.Find.Text = ThisWorkbook.Worksheets("Sheet1"). _ Range("A" & i) ' 検索する方向を指定します .Selection.Find.Forward = True If .Selection.Find.Execute Then With .Selection P = .Range.Information(wdActiveEndPageNumber) L = .Range.Information(wdFirstCharacterLineNumber) ThisWorkbook.Worksheets("Sheet1").Range("B" & i) = P & "ペ-ジ == " & L & "行" End With Else ThisWorkbook.Worksheets("Sheet1").Range("B" & i) = 0 End If Next End With ThisWorkbook.Worksheets("Sheet1").Cells.Columns.AutoFit Application.ScreenUpdating = True Next End Sub

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Selectionは「親」がApplicationかWindowだったと思います。
なので、以下を

VBA

1With objDoc

次のようにするか、

VBA

1With objDoc.ActiveWindow

次のようにしてみてはいかがでしょうか

VBA

1With objWord

投稿2021/10/25 00:46

hex309

総合スコア761

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

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

taakfue

2021/10/25 12:59

ありがとうございました! 無事エラーなく実行できました またよろしくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問