![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 19.05.2013
Сообщений: 24
|
![]()
Доброго времени суток!
Требуется получить список всех знаков, используемых в документе. Наваял нижеприведенный код. Работает, Но очень медленно. Возможна ли оптимизация? ЗарСпасБол! Код:
Последний раз редактировалось Stilet; 19.05.2013 в 17:10. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 776
|
![]()
Пункт 1
Вот такой вариант, хотя если точно не уверены, что к чему, то лучше использовать VBA-Word-средства, а не просто VBA-средства. Можно попробовать использовать VBA-Word-средства, например, просмотр каждого символа в документе, и использование объекта "Dictionary". Код:
Пункт 2 В вашем коде, нужно добавлять новые данные не ко всей строке, а сделайте ещё одну переменную. В эту переменную помещайте, например, по 100 символов, а затем эти символы добавляйте в основную строку. И т.д. Так будет быстрее, чем добавлять каждый символ к основной строке. Последний раз редактировалось Скрипт; 20.05.2013 в 07:09. |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 12.08.2010
Сообщений: 1,079
|
![]()
хотя бы
Код:
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 776
|
![]()
shanemac51, можно не помещать данные в переменную, а затем использовать эту переменную в цикле, т.к. расчёт:
Код:
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 12.08.2010
Сообщений: 1,079
|
![]()
попробуйте так
Код:
--есть символы unicode --ничего не говорится о регистрах п/П, а/А
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание Последний раз редактировалось shanemac51; 20.05.2013 в 08:08. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 19.05.2013
Сообщений: 24
|
![]()
Большое всем спасибо!
У меня в конце концов получилось следующее: Код:
Правда, я не совсем понял реплику насчет того, что нет необходимости помещать ActiveDocument... в переменную. В вышеуказанном виде скрипт работает меньше двух секунд с текстом ~900 тысяч знаков. Когда же я заменил "strTemp" на "ActiveDocument.Content.Text", дождаться конца его работы мне не удалось ![]() Последний раз редактировалось Vadim39; 21.05.2013 в 02:08. |
![]() |
![]() |
![]() |
#7 | |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 776
|
![]() Цитата:
Дело в том, что в Word-документе может быть много всего (таблицы, рисунки, автоматизированные поля, элементы управления (кнопки и другое), сноски, выноски и т.д.), и это усложняет работу с Word-документом, т.к. нужно учитывать много деталей. Если вы редко делаете макросы для программы "Word", то можете не учесть какую-нибудь деталь. Когда вы помещаете документ в переменную, то в переменной Word-документ уже находится не так, как он находится в программе "Word". И VBA-средствами (пример VBA-средства - InStr) вы уже работаете не так, как работали бы VBA-Word-средства (пример VBA-Word-средства - Character) с документом. Поэтому нужно чётко представлять - будет ли получен такой же результат при использовании только VBA-средств. Последний раз редактировалось Скрипт; 21.05.2013 в 08:35. |
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 776
|
![]()
Vadim39, зачем вы используете лишнюю переменную, усложняя таким образом чтение кода?
Код:
Код:
Последний раз редактировалось Скрипт; 21.05.2013 в 08:31. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 19.05.2013
Сообщений: 24
|
![]()
Скрипт, Спасибо за объяснения!
Насчет Ln = Len(strTemp) Вы совершенно правы, просто я привел пример кода, а значение длины нужно несколько раз. Пользуясь случаем, хочу попросить совета по другому поводу. Или лучше создать новую тему? Вопрос такой: Нужно запустить из макроса диалог поиска и замены, причем курсор должен оказаться в начале поля замены. Если вызвать Dialogs(wdDialogEditReplace).Show, то после выполнения замены появляется сообщени об ошибке. Кроме того, я не знаю как перемещать курсор внутри диалогового окна. Если же вызывать диалог с помощью SendKeys "^h", все отлично, и следующие за ним SendKeys "{TAB}" SendKeys "{HOME}" ставят курсор в нужное место, но возникает другая проблема: все это работает только, в том случае, если в момент вызова раскладка клавиатуры английская, если же русская - вместо вызова диалога в документ впечатываются "h" и знак табулятора. Если принципиального решения не существует, то может кто-нибудь подскажет, как написать скрипт для определения и управления раскладкой клавиатуры. ЗарСпасБол! |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 776
|
![]()
Vadim39, создайте новую тему, если новый вопрос никак не связан с этой темой.
Это увеличит вероятность, что вам помогут, т.к. перелистывать 10 веб-страниц не каждому захочется, а посмотреть короткую тему, желание может возникнуть. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Возможно ли упростить макрос? | KOSTIK1 | Microsoft Office Excel | 6 | 31.08.2011 14:01 |
Помогите оптимизировать макрос | kipish_lp | Microsoft Office Excel | 20 | 27.07.2010 10:48 |
Макрос с диалоговым окном. Возможно такое? | Zhiltsov | Microsoft Office Excel | 9 | 09.06.2009 14:24 |
Помогите оптимизировать! | Altera | Общие вопросы Delphi | 6 | 25.03.2008 20:09 |
Оптимизировать код | NeiL | Помощь студентам | 2 | 21.02.2008 08:57 |