Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2018, 14:59   #1
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию VBA Access Цикл по страницам Word

Доброго времени суток
Хочу узнать как организовать цикл по страницам вордовского документа
Что-нибудь наподобие
Код:
For Each pg in doc.Страница
В дальнейшем внутри этого цикла должно быть возможно сделать цикл по таблицам, имеющемся на странице
Код:
For Each tdf In pg.Tables
Я могу использовать процедуру разбивки на страницы, организовать список файлов(страниц), и далее идти по файлам, а в конце их удалить. Но хотелось бы знать более лаконичный способ
Ethex вне форума Ответить с цитированием
Старый 06.04.2018, 17:32   #2
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

Есть идея
Попробовать выделить текст на странице, а дальше создавать цикл по таблицам внутри Range
Попробую реализовать и отпишусь что вышло
Ethex вне форума Ответить с цитированием
Старый 11.04.2018, 14:39   #3
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

Цитата:
Сообщение от Ethex Посмотреть сообщение
Попробовать выделить текст на странице, а дальше создавать цикл по таблицам внутри Range
Это получилось
Код:
Public Sub Test()
Dim app As Word.Application, wd As Word.Document, wr As Word.Range
Dim wt
Dim db As DAO.Database, rs As DAO.Recordset
Dim i As Long, cnt As Long
Set app = New Word.Application
app.Visible = False
Set wd = app.Documents.Open(Me.Поле0.Value)
MsgBox wd.Tables(1).Columns.Count
Set wr = wd.Range
Set db = CurrentDb
db.Execute "CREATE TABLE Test (1 VARCHAR, 2 VARCHAR, 3 VARCHAR)"
Set rs = db.OpenRecordset("Test")
i = 1
cnt = wd.Content.ComputeStatistics(wdStatisticPages)
   Do Until i > cnt
      If wd.Tables.Count > 0 Then
         If i = cnt Then
         wr.End = wd.Range.End
         Else
         wd.ActiveWindow.Selection.GoTo wdGoToPage, wdGoToAbsolute, i + 1
         wr.End = wd.ActiveWindow.Selection.Start
         End If
         For Each wt In wr.Tables
...
Однако для того, что будет происходить далее внутри цикла, такой метод не очень себя зарекомендовал. Лучше использовать разбивку документа на страницы
Ethex вне форума Ответить с цитированием
Старый 12.04.2018, 12:25   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

а чем не устраивает
Код:
For Each Tbl in WordDocument.Tables
          ...
Next Tbl
?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 12.04.2018, 15:06   #5
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

DiemonStar в данном случае я к этому способу как раз и пришёл
Вордовская таблица на 20+- тысяч строк обрабатывается долго до безобразия. Разбить один документ на множество (постранично), а затем поочерёдно открывать каждый и брать данные из таблиц - сокращает время более чем ощутимо
В данном случае я имею дело с таблицами, составленными коряво (3 таблицы выглядят как одна). И любопытства ради захотел попробовать обойтись без разбивки и брать данные с каждой из страниц поочерёдно. Но, с разбивкой оказалось эфективнее и предложенный вами выше метод имеет место
Ethex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Access И снова импорт из Word Ethex Помощь студентам 4 18.08.2017 15:30
Создание запроса Access VBA - MS Access nikolaynn2008 Microsoft Office Access 2 06.08.2016 01:13
VBA Word,VBA Excel решить 2 задачи fafolo4ka Фриланс 6 05.03.2012 01:15
Stringgrid, таблица Word и цикл Максон11 Помощь студентам 2 26.04.2011 18:07
Access+word и access+pdf xanderg Microsoft Office Access 2 07.11.2010 13:51