9

Макрос: копирование текста из Word в Excel

День добрый, дамы и господа!

Помогите, кто чем может, пжлст.

Задача, думаю, тривиальная для людей шарящих, я, к сожалению не такой.

Нужно сделать макрос, который бы искал файл Word в фиксированной папке, с названием по маске "H6*.doc" (в ячейке H6, соответственно часть названия файла).

После этого осуществлял поиск в открытом файле Word по фиксированной фразе, выдергивал предложение, содержащее эту фразу (т.е. текст от . до .) и вставлял это предложение в ячейку Excel.

Форматирование не важно.

Заранее спасибо.

MS, Libreoffice & Google docs

762 поста14.9K подписчика

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.

0
Автор поста оценил этот комментарий
Наверное поздновато пишу. Но тем не менее. Решается это все очень успешно с помощью надстройки power query (в эксель выше 2013 установлена по умолчанию). Ее освоение, на мой взгляд, проще чем освоение макросов. Основной алгоритм с ее использованием предполагаю: подключение к нужной папке, фильтрация нужных файлов, извлечение данных из них, и полследующее усечение по поиску в тексте. Соответственно на выходе само собой соберется в обновляемую таблицу
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Лучше поздно, чем никогда :)

3
Автор поста оценил этот комментарий
сайт с фрилансерами в помощь. Увы, бесплатный сыр только в мышеловке.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Позволю себе немного разрушить твой мир.

#comment_245908692

Не всё в этом мире делается исключительно за деньги.

показать ответы
5
Автор поста оценил этот комментарий

Примерно как-то так:

Sub files_1()

Dim wbk As Workbook

Dim texttofind As String

Set wbk = ThisWorkbook

texttofind = "мыла" 'Текст для поиска в файле

pathtofile = "d:\downloads\" 'Путь к папке с фалами

wildcard = "dasff*.doc*" 'имя файла для поиска

strfile = Dir(pathtofile & wildcard)

Do While Len(strfile) > 0

t = word_to_excel(CStr(pathtofile & strfile), texttofind)

strfile = Dir

wbk.Activate

Range("a1") = t 'Переносим найденный текст в ячейку А1

Loop

wbk.Save

End Sub

Function word_to_excel(FilePath As String, texttofind As String)

Dim oWord As Word.Application

Dim WordNotOpen As Boolean

Dim oDoc As Word.Document

Dim oTbl As Word.Table

Dim fd As Office.FileDialog

Dim documenttext, firstterm, secondterm As String

Dim tabl_1 As String

Dim dottofind As String

On Error Resume Next

dottofind = "."

' Get or start Word

Set oWord = GetObject(Class:="Word.Application")

If Err Then

Set oWord = New Word.Application

WordNotOpen = True

End If

oWord.Visible = True

' Open document

Set oDoc = oWord.Documents.Open(Filename:=FilePath)

Debug.Print (oWord.ActiveDocument.ActiveWindow.View.ReadingLayout)

If oWord.ActiveDocument.ActiveWindow.View.ReadingLayout Then ActiveDocument.ActiveWindow.View.ReadingLayout = False

Set myrange = oWord.ActiveDocument.Range

documenttext = myrange.Text

midposition = InStr(1, documenttext, texttofind, vbTextCompare)

lastposition = InStr(midposition, documenttext, dottofind, vbTextCompare)

left_documenttext = Left(documenttext, lastposition)

textlength = InStr(2, StrReverse(left_documenttext), dottofind, vbTextCompare) - 1

foundtext = Trim(Mid(documenttext, lastposition - textlength + 1, textlength))

word_to_excel = foundtext

'Debug.Print (data_doc)

Exit_Handler:

On Error Resume Next

oDoc.Close SaveChanges:=False

If WordNotOpen Then

oWord.Quit

End If

'Release object references

Set oTbl = Nothing

Set oDoc = Nothing

Set oWord = Nothing

Application.ScreenUpdating = True

oWord.Quit

Application.Wait Now + #12:00:05 AM#

Exit Function

Err_Handler:

MsgBox "Word caused a problem. " & Err.Description, vbCritical, "Error: " & Err.Number

Resume Exit_Handler

End Function

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо, бро!

Если честно, думал это строчек 10 будет, а тут вон какое полотнище.

Работает, сижу, пытаюсь осознать всё написанное :D

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества