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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2013, 20:52   #1
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию Изменение размера ячейки

Как ускорить вот такой код?
Смысл кода - сделать в ячейках нужную ширину.
Работает очень долго в больших таблицах (от 10 страниц).

Обращение через Range, т.к. в таблицах могут быть объединённые ячейки.
Код:
Sub Макрос1()

    Dim myTimer As Double
    
    myTimer = Timer
    
    Dim i As Long
    
    For i = ActiveDocument.Tables(1).Range.Cells.Count To 1 Step -1
        ActiveDocument.Tables(1).Range.Cells(i).PreferredWidth = 50
    Next i
    
    Debug.Print Timer - myTimer

End Sub
В интернете читал, что Word-документ похож на HTML-страницу. Можно получить HTML-код Word-документа. Внести нужные размеры таблицы в HTML-код и затем обратно в Word-документ. Вот смотрю сейчас, как это можно сделать. Главное, чтобы текст не исказился от таких манипуляций.

Последний раз редактировалось Скрипт; 12.02.2013 в 21:59.
Скрипт вне форума Ответить с цитированием
Старый 12.02.2013, 22:38   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Попробовал с таблицей, в которой есть объединенные ячейки:
Код:
    ActiveDocument.Tables(1).Range.Cells.PreferredWidth = 50
Результат тот же самый.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 12.02.2013, 22:41   #3
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Казанский, я неточно описал свою задачу. Ширина ячеек разная.
Просто к примеру привёл код, который если запустить в документе с большой таблицей, то код будет несколько минут работать.

Сейчас решил поиском воспользоваться по Форуму, оказывается периодически люди спрашивают, как перевести Word-таблицу в HTML-код, чтобы быстрее обработать. Пока не разобрался. Видимо, нужно время потратить, чтобы разобраться - за 1 день не разберёшься.
Скрипт вне форума Ответить с цитированием
Старый 12.02.2013, 23:23   #4
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

выложили бы образец таблицы
------может и помогу чем

большинство своих отчетов из word-excel-access-foхpro-1c....
формирую программно в НТМ-формате
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 12.02.2013, 23:30   #5
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

shanemac51, мне нужно сам принцип понять, а не просто решить конкретную задачу.

Вот выложил документ. Нужно получить HTML-код таблицы. С помощью, например, "Найти и заменить" установить нужные размеры ячеек, а затем всё обратно превратить в Word-таблицу.

Т.е. смысл в чём в данном случае? Сделать размеры ячеек не с помощью VBA-Word, а с помощью HTML-кода, в котором с помощью VBA изменить числа, которые представляют собой размеры ячеек.
Вложения
Тип файла: zip Образец.zip (11.6 Кб, 11 просмотров)

Последний раз редактировалось Скрипт; 12.02.2013 в 23:53.
Скрипт вне форума Ответить с цитированием
Старый 12.02.2013, 23:33   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Примерно так (файл не открывал)
Код:
Dim s$
With ActiveDocument.HTMLProject
    s = .HTMLProjectItems(1).Text
    s = Replace(s, "width:50.0pt;", "width:55.0pt;")
    .HTMLProjectItems(1).Text = s
    .RefreshDocument
End With
Но я слышал, что начиная с 2007 эту фичу убрали. У Вас работает Alt+Shift+F11?
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 12.02.2013, 23:54   #7
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Казанский, в Word 2010 не запускается "Microsoft Script Editor" при нажатии сочетаний клавиш "Alt+Shift+F11".
Я вообще ни разу не пользовался "Microsoft Script Editor".

Последний раз редактировалось Скрипт; 13.02.2013 в 09:52.
Скрипт вне форума Ответить с цитированием
Старый 13.02.2013, 02:00   #8
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

что-то мне кадется вы не в ту сторону копаете.

1. Отключай всю калькуляцю, оновление экрана и т.п. (пример)
Код:
Application.ScreenUpdating = False
2. у меня ускоритьлось в три раза (по этому пункту)
Код:
Dim cell As cell

For Each cell In ActiveDocument.Tables(1).Range.Cells
    cell.PreferredWidth = 50
Next
Тишина – самый громкий звук

Последний раз редактировалось nerv; 13.02.2013 в 02:15.
nerv вне форума Ответить с цитированием
Старый 13.02.2013, 07:44   #9
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

вы выложили нормальную таблицу
на нее следующий код сработает(без НТМ)

Код:
Sub ww130213()

 Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPercent
 Selection.Tables(1).Columns(1).PreferredWidth = 50
 Selection.Move Unit:=wdColumn, Count:=1
 Selection.SelectColumn
 Selection.Columns.PreferredWidthType = WdPreferredWidthPercent
 Selection.Columns.PreferredWidth = 30
 Selection.Move Unit:=wdColumn, Count:=1
 Selection.SelectColumn
 Selection.Columns.PreferredWidthType = wdPreferredWidthPercent
 Selection.Columns.PreferredWidth = 20
End Sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 13.02.2013, 08:27   #10
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Пункт 1

nerv, я использовал:
Код:
Application.ScreenUpdating = False
и у меня создалось впечатление, что в программе Word вот это "Application.ScreenUpdating" вообще не работает.


Пункт 2

Цитата:
nerv: Отключай всю калькуляцю
напишите пример кода.

Последний раз редактировалось Скрипт; 13.02.2013 в 08:35.
Скрипт вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение размера StringGrid'а iKarma Общие вопросы Delphi 2 04.12.2011 12:20
изменение размера формы maksim_serg Microsoft Office Excel 0 16.04.2010 04:22
Изменение размера файла в С++ Vladya Помощь студентам 0 08.12.2009 18:21
Изменение размера панели AbekIn3D Общие вопросы Delphi 3 05.11.2009 13:30
Изменение размера окна Anfall Общие вопросы Delphi 5 14.03.2009 10:06