Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 6
1

Поиск текста и перемещение по документу Word из редактора VBA CorelDraw X6

01.12.2015, 05:43. Просмотров 2368. Ответов 4


Добрый день! Пробую автоматизировать работу, осваиваю VBA, столкнулся со следующей загвоздкой:
Необходимо в документе Word находить по названию таблицы индекс этой таблицы в документе для дальнейшей работы с ней. Операции поиска необходимо проводить из редактора Corel, потому что дальше основная работа будет осуществляться в документе Corel со значениями из таблицы. Ниже привожу код, написанный по аналогии с кодом для поиска, работающим в редакторе VBA Word:

PureBasic
1
2
3
4
5
6
7
8
9
Dim oWrdApp, oWrdDoc, oTab1 As Object
Set oWrdApp = CreateObject("Word.Application")
oWrdApp.Visible = True
Set oWrdDoc = oWrdApp.Documents.Open("C:\doc1.docx")
oWrdDoc.Activate
Set k = oWrdDoc.Range
k.Find.Text = "Таблица 1"
If k.Find.Execute Then k.Select
Selection.Move Unit:=15, Count:=1
Проблема в том, что после выполнения k.Select объект Selection остаётся пустым, хотя в документе текст выделяется и в результате действие Selection.Move Unit:=15, Count:=1 ничего не даёт. Скорее всего ошибка в неточном указании ссылок на объекты, но ни Word.selection, ни Word.Application.Selection результатов не дали. Соответствующие библиотеки подключены. Читал, что лучше обходиться без Select, но пока других способов поиска и перемещения по тексту в Word не нашёл.
Для уточнения название таблицы находится сразу над таблицей, поиск индекса таблицы, после перемещения в него курсора, планирую осуществить следующим кодом, который нашёл на просторах форума:

PureBasic
1
2
3
4
5
6
7
8
Set tblSel = Selection.Tables(1)      
    lngStart = tblSel.Range.Start
       For i = 1 To ActiveDocument.Tables.Count Step 1
        If ActiveDocument.Tables(i).Range.Start = lngStart Then
        lngTblIndex = i
        Exit For
        End If
    Next i
Резюмирую вопрос: как искать заданный текст в Word и затем перемещаться по документу из редактора VBA CorelDraw
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2015, 05:43
Ответы с готовыми решениями:

Перемещение текста закладок из Word в Excel, VBA
Мне нужно переместить текст закладок из Word в определенные ячейки Excel. Пока получается...

Привязка формы VBA к документу Word
Приветствую народ! Разобрался с vba для редактирования документов и отдельных листов в excel...

Как сделать чтобы замена текста в WORD производилась по всему документу
Сделал программу для выгрузки текста в шаблон Word с переменными. Как сделать чтобы все переменные...

Поиск текста по PDF документу
Суть: Есть куча одинаковых pdf анкет с информацией о студентах в таком виде: Имя: Вася Пупкин...

__________________
Помогаю в написании студенческих работ здесь.
4
5542 / 1347 / 148
Регистрация: 08.02.2009
Сообщений: 4,080
Записей в блоге: 30
01.12.2015, 07:40 2
Не верю, что
Цитата Сообщение от BassKrsk Посмотреть сообщение
после выполнения k.Select объект Selection остаётся пустым
А вот
Цитата Сообщение от BassKrsk Посмотреть сообщение
действие Selection.Move Unit:=15, Count:=1
переносит выделение в ближайшую таблицу, фактически сбрасывая его с того, что нашёл
Цитата Сообщение от BassKrsk Посмотреть сообщение
k.Find.Execute
Вообще, уважаемый BassKrsk, вы в русскоязычной среде, наверное, первый за 20 лет, кто докумекал так использовать VBA в Corel’е (искать им текст Word’а)!

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


Для начала я попробовал сам:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Потуги()
'Selection.Move Unit:=15, Count:=1 'сдвиг выделениния «на одну таблицу»
'фактически курсор стал в первую ячейку нижележащей таблицы
'Пример из справки VBE:
Set Range1 = ActiveDocument.Tables(2).Range
    With Range1
        .Collapse Direction:=wdCollapseStart
        .Move Unit:=wdTable, Count:=-1 'wdTable = 15
        .Select
    End With
'здесь: в 1-ю ячейку предыдущей (по отношению к таб. 2) таблицы
End Sub
А чтобы быстро найти человека с Corel’ом да чтоб как-то работал в его VB-среде… я сомневаюсь! Хотя знаю верстальщиков 10.
0
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 6
01.12.2015, 07:45  [ТС] 3
Уважаемый Sasha_Smirnov, спасибо за ответ, я начал пробовать добавить код поиска в CorelDraw после того как алгоритм заработал в Word. Смысл для меня операции Selection.Move Unit:=15, Count:=1 как раз в том, что мне необходимо перейти в следующую таблицу сразу за найденным текстом (названием таблицы, такой формат документа, это неизменно). А после перехода в первую ячейку таблицы путём перебора в коллекции (я приводил код в первом сообщении) Tables возможно найти её индекс в документе и дальше уже работать с ячейками этой таблицы. Всё это делается так как состав документа Word непостоянен и количество таблиц разнится, поэтому приходится искать по тексту.
После k.Select Msgbox(Selection) выдаёт пустой фрейм. Скорее всего потому что при Msgbox(Selection) идёт обращение к объекту Selection CorelDraw, а он пустой. А как сделать точную ссылку на Selection в Word вопрос.
PS Насчёт искать в Word через CorelDraw согласен, месье знает толк в извращениях)) Но специфичная задачка просто.
0
Заблокирован
01.12.2015, 08:01 4
Лучший ответ Сообщение было отмечено BassKrsk как решение

Решение

oWrdApp.SELECTION вместо Selection использовать не пробовали?
2
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 6
01.12.2015, 08:28  [ТС] 5
Апострофф, спасибо, уважаемый! Вы абсолютно правы! Это было именно то что надо!
Я перебирал варианты без уточнения, просто Word.Application.Selection, либо документ oWrdDoc.Selection, а надо было выше по иерархии подниматься. Ещё раз спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2015, 08:28

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Настройка редактора VBA для прокручивания текста мышкой
как настроить редактор VBA, чтобы можно было прокручивать текст проги колесиком мышки, а не только...

Поиск текста по документу и замена его на свой текст
Вот есть маркер в Вворде типа $FIO$-2е штуки. В одну надо записывать Фамилию Имя Отчество полностью...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.