Microsoft Excel/Word Version 2013-2016
フォルダの中にあるWordファイルの中から特定の文字列を探し出し、前後の範囲を広げて抽出した文字列をExcelに出力したいのですが、
VBA
1objSelection.Paragraphs.first.Range.Text
とすると欲しい範囲までとれません、
行数やページ単位で取得する方法は分かったのですが、チルダが付いた変なファイルを読み込んだ時などにエラーが発生すると致命的な問題が起きることがあるため用いたくありません。
文字列取得範囲を広げて指定する良い方法はないでしょうか?
よろしくお願いします。
VBA
1Sub DocParagraphGet() 2'参考 https://technet.microsoft.com/ja-jp/library/ee692875.aspx 3 4 Dim wdApp As Object ' Word.Application 5 Dim wDoc As Object 'Word.Document 6 Dim objFso As Object 7 Dim objFolder As Object 8 Dim objSelection As Object 9 Dim sBookName As String '出力ブック名 10 Dim objWb As Workbook 11 Dim sOrgPath As String, sRetPath As String, sKeyWord As String 12 Dim iParagNum '段落数 13 14 15 Set wdApp = CreateObject("Word.Application") 16 wdApp.Application.Visible = True '可視化 表示しなければ特に必要なし 17 18 sOrgPath = ThisWorkbook.Sheets("フォーム").Range("B13") & "\" 19 sRetPath = ThisWorkbook.Sheets("フォーム").Range("B14") & "\" 20 iParagNum = ThisWorkbook.Sheets("フォーム").Range("B15") 21 sKeyWord = "規格" 22 sBookName = Format(Now, "yymmddhhmm") & "_Wordからの出力" & ".xlsx" 23 24 Set objFso = CreateObject("Scripting.FileSystemObject") 25 Set objFolder = objFso.GetFolder(sOrgPath) 26 Set objWb = Workbooks.Add 27 objWb.SaveAs (sRetPath & sBookName) 28 29 objWb.Sheets.Add Before:=Sheets(1) 30 r = 0 31 For Each f In objFolder.Files 32 33 sxx = Right(f.Name, 5) 34 If 0 < InStr(sxx, ".doc") Then 35 r = r + 1 36 objWb.Sheets(1).Cells(r, 1) = f.Name 37 Set wDoc = wdApp.documents.Open(sOrgPath & "\" & f.Name, True) '読み取りモードで開く 38 Set objSelection = wdApp.Selection 39 objSelection.Find.Text = sKeyWord 40 objSelection.Find.Forward = True 41 If objSelection.Find.Execute Then 42 r = r + 1 43 objWb.Sheets(1).Cells(r, 2) = objSelection.Paragraphs.first.Range.Text 44 Else 45 objWb.Sheets(1).Cells(r, 2) = "なし" 46 End If 47 wdApp.documents.Close 48 End If 49 50 Next f 51 52Set objFso = Nothing 53Set objFolder = Nothing 54Set wdApp = Nothing 55 56 57End Sub
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/25 05:30
2018/10/25 14:32
2018/10/25 23:22