Получить определенные значения из документа 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
Листинг программы
Sub Akzioners()
    Dim b(), i&, j&, txt$, n&, k&, rw&
    a = Array("Полное фирменное наименование:", _
        "Доля участия лица в уставном капитале эмитента, %:", _
        "Доля принадлежащих лицу обыкновенных акций эмитента, %:")
    Workbooks.Add
    Set ShExcel = ActiveSheet
    FileDocs = Application.GetOpenFilename(filefilter:="Documents(*.doc;*.docx),*.doc;*.docx", _
                Title:="Выберите файлы компаний с данными акционеров", MultiSelect:=True)
    If Not IsArray(FileDocs) Then Exit Sub
    Application.ScreenUpdating = False
    Set objWord = CreateObject("Word.Application")
    'objWord.Visible = True
    For k = 1 To UBound(FileDocs)
        With objWord.Documents.Open(FileDocs(k))
            txt = .Range.Text
            s = Split(txt, a(0))
            ReDim b(UBound(s), 0 To 2)
            b(0, 0) = .Name
            .Close
        End With
        s = Split(txt, vbCr)
        j = 1
        For n = 0 To UBound(s)
            If InStr(1, s(n), a(i)) <> 0 Then
                b(j, i) = VBA.Trim(Split(s(n), ":")(1))
                i = i + 1
                If i > 2 Then i = 0: j = j + 1
            End If
        Next
        With ShExcel
            rw = IIf(.UsedRange.Rows.Count = 1, 1, .UsedRange.Rows.Count + 1)
            .Cells(rw, 1).Resize(UBound(b, 1) + 1, UBound(b, 2) + 1) = b
        End With
    Next
    Application.ScreenUpdating = True
    objWord.Quit
End Sub

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


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

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

13   голосов , оценка 3.692 из 5
Похожие ответы