Получить определенные значения из документа word макросом - VBA

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Подскажите, пожалуйста, можно ли макросом произвести поиск по ключевому слову в документах Word и на основе этого вытащить определенные данные в таблицу Excel или ворд? И как это сделать? Ситуация: Есть 4 года и 65 компаний. И есть соответственно 260 отчетов, названных "Компания_год". В отчетах содержится информация о акционерах компании и их долях. Во всех отчетах необходимый раздел (да и все разделы) называется одинаково. Нужно макросом найти этот раздел и вытащить из него пары: "название - доля1, доля2" в отдельный файл. Название идет после фразы: "Полное фирменное наименование: ", доли после "Доля участия лица в уставном капитале эмитента, %: " и "Доля принадлежащих лицу обыкновенных акций эмитента, %: ". В идеале должна получится таблица вида (заголовки любые), всего будет 4 листа, каждый для своего года: Компания1: Акционер1 доля1 доля2 акционер2 доля1 доля2 акционер3 доля1 доля2 Компания2: Акционер1 доля1 доля2 акционер2 доля1 доля2 акционер3 доля1 доля2 Прикрепляю файл-пример с разделом отчета, из которого надо вытащить данные Собственно, вопрос: возможно ли это? и, возможно, кто-то писал подобное и готов поделиться? Отношения с vba: с языком практически не знакома, но могу читать код и "собирать" из разных макросов, чуть переделывать под себя (но только внутри excel или word). С макросами экспорта из word в excel или наоборот не сталкивалась никогда. Поиск пока выдает только "из excel в word", а не наоборот. Спасибо!

Решение задачи: «Получить определенные значения из документа word макросом»

textual
Листинг программы
  1. Sub Akzioners()
  2.     Dim b(), i&, j&, txt$, n&, k&, rw&
  3.     a = Array("Полное фирменное наименование:", _
  4.         "Доля участия лица в уставном капитале эмитента, %:", _
  5.         "Доля принадлежащих лицу обыкновенных акций эмитента, %:")
  6.     Workbooks.Add
  7.     Set ShExcel = ActiveSheet
  8.     FileDocs = Application.GetOpenFilename(filefilter:="Documents(*.doc;*.docx),*.doc;*.docx", _
  9.                 Title:="Выберите файлы компаний с данными акционеров", MultiSelect:=True)
  10.     If Not IsArray(FileDocs) Then Exit Sub
  11.     Application.ScreenUpdating = False
  12.     Set objWord = CreateObject("Word.Application")
  13.     'objWord.Visible = True
  14.    For k = 1 To UBound(FileDocs)
  15.         With objWord.Documents.Open(FileDocs(k))
  16.             txt = .Range.Text
  17.             s = Split(txt, a(0))
  18.             ReDim b(UBound(s), 0 To 2)
  19.             b(0, 0) = .Name
  20.             .Close
  21.         End With
  22.         s = Split(txt, vbCr)
  23.         j = 1
  24.         For n = 0 To UBound(s)
  25.             If InStr(1, s(n), a(i)) <> 0 Then
  26.                 b(j, i) = VBA.Trim(Split(s(n), ":")(1))
  27.                 i = i + 1
  28.                 If i > 2 Then i = 0: j = j + 1
  29.             End If
  30.         Next
  31.         With ShExcel
  32.             rw = IIf(.UsedRange.Rows.Count = 1, 1, .UsedRange.Rows.Count + 1)
  33.             .Cells(rw, 1).Resize(UBound(b, 1) + 1, UBound(b, 2) + 1) = b
  34.         End With
  35.     Next
  36.     Application.ScreenUpdating = True
  37.     objWord.Quit
  38. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы