Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Открытие файла Word из Excel и поиск в открытом файле - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Открытие файла Word из Excel и поиск в открытом файле (Макросы/Sub)
Открытие файла Word из Excel и поиск в открытом файле
tsch Дата: Пятница, 09.02.2018, 08:08 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день!
Прошу помощи с реализацией следующего:
1. есть файл Excel, в котором содержится поле для ввода информации для поиска;
2. есть набор файлов .docx, которые выступают в качестве "базы данных";
3. необходимо осуществить поиск информации из поля в Excel по "базе данных".

Пока получается открыть файл .docx из Excel:

[vba]
Код
Sub OpenDoc()
    Dim WordObj As Object
    Dim WordDoc As Object
        Set WordObj = CreateObject("Word.Application")
        Set WordDoc = WordObj.Documents.Open("C:\Перечень стратегов по Распоряжению правительства.docx")
        'WordObj.Visible = True
    Set WordDoc = Nothing
    Set WordObj = Nothing
End Sub
[/vba]
И есть понимание, что поиск в открытом файле должен осуществляться через ActiveDocument.Content.Find, но как сделать активным именно открытый документ, понимания нет. Пример файла "базы данных" во вложении.

P.S. К сожалению, перевести файлы .docx в другой формат не получится, потому что они все время меняются/удаляются/добавляются. Нет, наверное эту задачу можно быстро и легко реализовать с помощью других языков, но знаний хватает только на работу с VBA на уровне copy-paste.
К сообщению приложен файл: ____.docx(63Kb)


Сообщение отредактировал tsch - Пятница, 09.02.2018, 08:09
 
Ответить
СообщениеДобрый день!
Прошу помощи с реализацией следующего:
1. есть файл Excel, в котором содержится поле для ввода информации для поиска;
2. есть набор файлов .docx, которые выступают в качестве "базы данных";
3. необходимо осуществить поиск информации из поля в Excel по "базе данных".

Пока получается открыть файл .docx из Excel:

[vba]
Код
Sub OpenDoc()
    Dim WordObj As Object
    Dim WordDoc As Object
        Set WordObj = CreateObject("Word.Application")
        Set WordDoc = WordObj.Documents.Open("C:\Перечень стратегов по Распоряжению правительства.docx")
        'WordObj.Visible = True
    Set WordDoc = Nothing
    Set WordObj = Nothing
End Sub
[/vba]
И есть понимание, что поиск в открытом файле должен осуществляться через ActiveDocument.Content.Find, но как сделать активным именно открытый документ, понимания нет. Пример файла "базы данных" во вложении.

P.S. К сожалению, перевести файлы .docx в другой формат не получится, потому что они все время меняются/удаляются/добавляются. Нет, наверное эту задачу можно быстро и легко реализовать с помощью других языков, но знаний хватает только на работу с VBA на уровне copy-paste.

Автор - tsch
Дата добавления - 09.02.2018 в 08:08
bmv98rus Дата: Пятница, 09.02.2018, 08:42 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1131
Репутация: 188 ±
Замечаний: 0% ±

Excel 2013/2016
Используйте Ваш обьект WordDoc вместо этого. И не стоит делать его видимым при обработке.
 
Ответить
СообщениеИспользуйте Ваш обьект WordDoc вместо этого. И не стоит делать его видимым при обработке.

Автор - bmv98rus
Дата добавления - 09.02.2018 в 08:42
tsch Дата: Пятница, 09.02.2018, 08:59 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Удалось продвинуться до следующего состояния:

[vba]
Код
Sub OpenDoc()
    Dim i As String
    Dim WordObj As Object
    Dim WordDoc As Object
    
    i = Worksheets("Лист1").Cells(1, 1).Value
    
    Set WordObj = CreateObject("Word.Application")
    Set WordDoc = WordObj.Documents.Open("C:\Перечень стратегов по Распоряжению правительства.docx")
        'WordObj.Visible = True
        WordDoc.Select
        If WordObj.Selection.Find.Text = i Then
            MsgBox ("Соответствие найдено")
        Else
            MsgBox ("Соответствие не найдено")
        End If
        WordDoc.Close True
        WordObj.Quit
    Set WordDoc = Nothing
    Set WordObj = Nothing
End Sub
[/vba]

Макрос выдает ответ "Соответствие не найдено", хотя информация в документе точно содержится.


Сообщение отредактировал tsch - Пятница, 09.02.2018, 09:03
 
Ответить
СообщениеУдалось продвинуться до следующего состояния:

[vba]
Код
Sub OpenDoc()
    Dim i As String
    Dim WordObj As Object
    Dim WordDoc As Object
    
    i = Worksheets("Лист1").Cells(1, 1).Value
    
    Set WordObj = CreateObject("Word.Application")
    Set WordDoc = WordObj.Documents.Open("C:\Перечень стратегов по Распоряжению правительства.docx")
        'WordObj.Visible = True
        WordDoc.Select
        If WordObj.Selection.Find.Text = i Then
            MsgBox ("Соответствие найдено")
        Else
            MsgBox ("Соответствие не найдено")
        End If
        WordDoc.Close True
        WordObj.Quit
    Set WordDoc = Nothing
    Set WordObj = Nothing
End Sub
[/vba]

Макрос выдает ответ "Соответствие не найдено", хотя информация в документе точно содержится.

Автор - tsch
Дата добавления - 09.02.2018 в 08:59
tsch Дата: Пятница, 09.02.2018, 10:03 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Ответ колхозным способом найден, может кому-то пригодится:

[vba]
Код
Sub StrategFinder()
    Dim i As String
    Dim WordObj As Object
    Dim WordDoc As Object
    
    i = InputBox("Скопируйте наименование организации: ")
    
    Set WordObj = CreateObject("Word.Application")
    Set WordDoc = WordObj.Documents.Open("C:\Перечень стратегов по Распоряжению правительства.docx")
        WordDoc.Select
        WordObj.Selection.Find.ClearFormatting
        If WordObj.Selection.Find.Execute(i) = True Then
            MsgBox ("Найдено соответствие в перечне Правительства №91-Р")
        Else
            MsgBox ("Соответствие не найдено")
        End If
        WordDoc.Close True
        WordObj.Quit

    Set WordDoc = Nothing
    Set WordObj = Nothing
End Sub
[/vba]

Буду благодарен за более изящное решение, потому что сейчас перебор между файлами "базы данных" реализован убого:

[vba]
Код
Set WordDoc = WordObj.Documents.Open("C:\n-й файл.docx")
        WordDoc.Select
        WordObj.Selection.Find.ClearFormatting
        If WordObj.Selection.Find.Execute(i) = True Then
            MsgBox ("Найдено соответствие в n-ом файле")
        Else
            MsgBox ("Соответствие не найдено")
        End If
        WordDoc.Close True
        WordObj.Quit
[/vba]
И так по всей базе.
 
Ответить
СообщениеОтвет колхозным способом найден, может кому-то пригодится:

[vba]
Код
Sub StrategFinder()
    Dim i As String
    Dim WordObj As Object
    Dim WordDoc As Object
    
    i = InputBox("Скопируйте наименование организации: ")
    
    Set WordObj = CreateObject("Word.Application")
    Set WordDoc = WordObj.Documents.Open("C:\Перечень стратегов по Распоряжению правительства.docx")
        WordDoc.Select
        WordObj.Selection.Find.ClearFormatting
        If WordObj.Selection.Find.Execute(i) = True Then
            MsgBox ("Найдено соответствие в перечне Правительства №91-Р")
        Else
            MsgBox ("Соответствие не найдено")
        End If
        WordDoc.Close True
        WordObj.Quit

    Set WordDoc = Nothing
    Set WordObj = Nothing
End Sub
[/vba]

Буду благодарен за более изящное решение, потому что сейчас перебор между файлами "базы данных" реализован убого:

[vba]
Код
Set WordDoc = WordObj.Documents.Open("C:\n-й файл.docx")
        WordDoc.Select
        WordObj.Selection.Find.ClearFormatting
        If WordObj.Selection.Find.Execute(i) = True Then
            MsgBox ("Найдено соответствие в n-ом файле")
        Else
            MsgBox ("Соответствие не найдено")
        End If
        WordDoc.Close True
        WordObj.Quit
[/vba]
И так по всей базе.

Автор - tsch
Дата добавления - 09.02.2018 в 10:03
bmv98rus Дата: Пятница, 09.02.2018, 14:03 | Сообщение № 5
Группа: Проверенные
Ранг: Старожил
Сообщений: 1131
Репутация: 188 ±
Замечаний: 0% ±

Excel 2013/2016
Не совсем понятно, чем вам помочь, то что вы написали можно чуть подправить
[vba]
Код
Sub StrategFinder()
    Dim i As String
    Dim WordObj As Object
    Dim WordDoc As Object
    
    i = InputBox("Скопируйте наименование организации: ")
    
    Set WordObj = CreateObject("Word.Application")
    Set WordDoc = WordObj.Documents.Open(Filename:="C:\temp\Перечень стратегов по Распоряжению правительства.docx", ReadOnly:=True)
    With WordDoc.Content
        .Find.ClearFormatting
        If .Find.Execute(FindText:=i, Forward:=True) = True Then
            MsgBox ("Найдено соответствие в перечне Правительства №91-Р")
        Else
            MsgBox ("Соответствие не найдено")
        End If
    End With
    WordDoc.Close True
    WordObj.Quit
    Set WordDoc = Nothing
    Set WordObj = Nothing
End Sub
[/vba]

но стандартный поиск windows даст результат при поиске в каталоге даже наверно быстрее. Например вот так в поисковой строке "content: РОСНЕФТЕГАЗ" бе кавычек выдаст тот файл(ы) в котором(ых) есть это слово. Я не знаю как в русскоязычном варианте будет.


Сообщение отредактировал bmv98rus - Пятница, 09.02.2018, 14:05
 
Ответить
СообщениеНе совсем понятно, чем вам помочь, то что вы написали можно чуть подправить
[vba]
Код
Sub StrategFinder()
    Dim i As String
    Dim WordObj As Object
    Dim WordDoc As Object
    
    i = InputBox("Скопируйте наименование организации: ")
    
    Set WordObj = CreateObject("Word.Application")
    Set WordDoc = WordObj.Documents.Open(Filename:="C:\temp\Перечень стратегов по Распоряжению правительства.docx", ReadOnly:=True)
    With WordDoc.Content
        .Find.ClearFormatting
        If .Find.Execute(FindText:=i, Forward:=True) = True Then
            MsgBox ("Найдено соответствие в перечне Правительства №91-Р")
        Else
            MsgBox ("Соответствие не найдено")
        End If
    End With
    WordDoc.Close True
    WordObj.Quit
    Set WordDoc = Nothing
    Set WordObj = Nothing
End Sub
[/vba]

но стандартный поиск windows даст результат при поиске в каталоге даже наверно быстрее. Например вот так в поисковой строке "content: РОСНЕФТЕГАЗ" бе кавычек выдаст тот файл(ы) в котором(ых) есть это слово. Я не знаю как в русскоязычном варианте будет.

Автор - bmv98rus
Дата добавления - 09.02.2018 в 14:03
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Открытие файла Word из Excel и поиск в открытом файле (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!