Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
1

Разница в скорости vba word и vba access

20.09.2016, 01:18. Показов 1491. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос: из акса идет выгрузка данных в файл ворд, далее эти данные опять же из акса форматно обрабатываются (данные заранее были тегированы - можно сказать, я в аксе небольшой html-редактор написал , а vba бегает по выгрузке в файле и заменяет теги на курсив/жирный и так далее..)
Проблема в том, что при существенном объеме файла ворд это очень медленный процесс - приходится использовать объект .words (ужасно медленный перебор в цикле по Range). В результате акс зависает на время выполнения скрипта, а оно доходит иногда до минуты и более (на документ объемом больше 5 страниц).
Вот и задумался - а можно ли освободить акс - перенеся код в шаблон ворд и просто выгрузив данные с рекодрсета, передать команду на запуск кода обработки уже в файле? Получится ли и будет ли разница в скорости обработки? Есть ли замена на что-то более скоростное, чем объект words (тегами выделяются отдельные слова и целые предложения)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2016, 01:18
Ответы с готовыми решениями:

Vba вывод из access в word
Здравствуйте , работаю в vba excel , необходимо при нажатии кнокпи в vba excel вывести таблицу в...

Доступ к элементам Word из Access средствами VBA
Друзья!Добрый день! Нужна помощь, с документа Word необходимо считать данные из текстовых полей и...

Как распечатать указанную страницу документа Word из vba Access?
Задача по нажатию кнопки на форме в Access открыть документ Word и распечатать одну указанную...

Разобраться с sql запросом в vba и правильным подключением базы access - word
Добрый день. Хочу замутить кнопку в форме базы по нажатию которой будет открываться шаблон word и...

9
Мы один, давай на "ты"
3598 / 1327 / 323
Регистрация: 16.06.2016
Сообщений: 3,143
20.09.2016, 03:55 2
Тиритически (для любителей грамматики), код выполняющийся в родном приложении, а не сервере автоматизации, будет несколько быстрее. Но, ИМХО, дело в данном случае не на какой стороне исполняется код, а в алгоритме - 2 раза перебираются данные.
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
20.09.2016, 07:29 3
Eujine, я подобную задау решала так:

1) делаем текстовое поле на форме.
2) текст с тегами вставляем туда,
3) затем переводим поле в режим rich text,
4) в поле выделить все, скопировать, вставить в ворд.

Добавлено через 1 минуту
Уточняю: именно скопировать-вставить, через буфер обмена, обязательно.
0
Мы один, давай на "ты"
3598 / 1327 / 323
Регистрация: 16.06.2016
Сообщений: 3,143
20.09.2016, 09:37 4
Зашёл, посмотрел ещё раз...
Eujine, а какой Word используешь? Я тут посмотрел немного в объектной модели... Может тебе не html применять если версии от 2007 и новее? К сожалению, ты не говоришь про то, как получаешь свою строку. Есть вариант из ADO.Recordset получать XML-строку и путём XSLT-преобразования (это ещё нужно написать) вставлять в Word.
Visual Basic
1
Word.Range.InsertXML(XML As String, [Transform])
Таким образом твоё желание будет выполнено - формирование данных в Access, а Word уже сам пережёвывает эти данные.
Небольшой пример есть в Help'е Word'а.
1
Модератор
Эксперт MS Access
12082 / 4942 / 791
Регистрация: 07.08.2010
Сообщений: 14,506
Записей в блоге: 4
20.09.2016, 09:41 5
Цитата Сообщение от Eujine Посмотреть сообщение
из акса идет выгрузка данных в файл ворд, далее эти данные опять же из акса форматно обрабатываются
я обычно программно формировала НТМ файл(уже с форматированием) и уже его открывала вордом или екселем или броузером в зависимости от того, что требовалось
--только просмотр в броузере
--печать в ворд с автоподгонкой ширины таблицы или несколько разных таблиц без разрыва по страницам, но с переносом шапки(например на лист 1 вслезла таблица 1 и кусок таблицы 2, поэтому второй лист начинается с шапки 2)
--или доработка в ексель с небольшой руганью о несовпадении форматов
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
20.09.2016, 13:23  [ТС] 6
Word у меня в основном 2010, но акс - 2003.
Про html я образно. У меня в базе, в поле таблицы слова выделяются тегами, например: <слово>. При выгрузке в ворд, туда переносится <слово>, а дальше код пробегает по содержимому и ищет все пары <>, далее слово между ними он делает курсивным, а теги сносит.
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
20.09.2016, 17:06 7
Цитата Сообщение от Eujine Посмотреть сообщение
Про html я образно. У меня в базе, в поле таблицы слова выделяются тегами, например: <слово>. При выгрузке в ворд, туда переносится <слово>, а дальше код пробегает по содержимому и ищет все пары <>, далее слово между ними он делает курсивным, а теги сносит.
Visual Basic
1
str=Replace(Replace(Replace(Поле,"<","<b]]"),">","</b>"),"]]",">")
И получаешь не образную, а реальную разметку. Затем выводишь этот текст на форму в поле с отображение рич текста. Копируешь весь текст в буфер и вставляешь в ворд. ВСЕ.
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
20.09.2016, 18:38  [ТС] 8
У меня 2003 акс, написал же- нет там rich text. И у большинства пользователей стоит третий.
0
Мы один, давай на "ты"
3598 / 1327 / 323
Регистрация: 16.06.2016
Сообщений: 3,143
21.09.2016, 05:25 9
Цитата Сообщение от Eujine Посмотреть сообщение
У меня 2003 акс, написал же- нет там rich text.
Но можно форматировать строку как html. С Word до 2007 в таком случае будет работать код
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub ttt()
Dim appWord As Object 'Word.Application
On Error Resume Next
 
Set appWord = GetObject(, "Word.Application")
    If appWord Is Nothing Then
            If Err Then Err.Clear
        Set appWord = CreateObject("Word.Application")
            If appWord Is Nothing Then Err.Clear: MsgBox "Не установлен MS Word!", vbCritical, "Ошибка": Exit Sub
    End If
With appWord.ActiveDocument
        With .HTMLProject
                With .HTMLProjectItems
                    With .Item(.Count)
                        .Text = "<html><body><div><strong>ghfhfghgfh </strong></div><div><strong>fgdfgdfgdfg</strong></div><div>јјјјјјјјј</div><div align=center>я вам пишу</div>" & _
                                "<div align=center>чего же боле?</div><div align=center>&nbsp;</div><div>ѕушкин, однако</div><div>&nbsp;</div></body></html>"
                    End With
                End With
            .RefreshDocument
        End With
End With
    If Not appWord Is Nothing Then
        With appWord
            .Visible = True
            .ScreenUpdating = True
        End With
    End If
Set appWord = Nothing
End Sub
В более новых версиях следует перейти на XML (про это я отметил выше)
1
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
21.09.2016, 08:19 10
Цитата Сообщение от Eujine Посмотреть сообщение
У меня 2003 акс, написал же- нет там rich text.
Извини, я не нарочно - просто уже забыла, что его там нет.
0
21.09.2016, 08:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2016, 08:19
Помогаю со студенческими работами здесь

Как заполнить Combobox в документе Word из программы, написанной на VBA-Access
При работе с VBA на Аксцессе столкнулся с ситуацией (думаю, не я один). Приходится формировать...

DLL для VBA и VB - почему разница в работе?
Доброго дня, читающий. Есть софтина &quot;Полезные расчеты&quot;, которая выполняет некую полезную работу....

Код VBA в Access 2010 работает, в Access 2007 выдает ошибку
Написала код VBA в Access 2010 - работает, в Access-2007 выдает ошибку. В чем причина - подскажите

Как заполнить базу данных Access с помощью vba в том же access и считать из нее инфу?
Прошу помочь в азах. Как заполнить базу данных Access с помощью vba в том же access и считать из...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru