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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2013, 23:12   #11
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Вот такой примерный код:
Код:
Sub Procedure_1()
    
    Dim myParagraph As Word.Paragraph
    Dim myArray As Variant
    Dim rngSearch As Word.Range
    
    'Чтобы ускорить работу кода:
    '1) перейдите в режим "Черновик";
    '2) отключите проверку правописания.
    
'-----------------------------------------------------------------------------------------------
    '1. Сначала заменяю слова с дефисом.
    
    'Просматриваем все абзацы в документе.
    For Each myParagraph In ActiveDocument.Paragraphs
        
        '1.1. Задаём диапазон для поиска.
        Set rngSearch = myParagraph.Range
        
        '1.2. Определяем, нужно обрабатывать два предложения или только первое.
        'С помощью "Split" разбиваем абзац на две части.
        myArray = Split(rngSearch.Text, "... ")
        
        '1.3. Считаем, сколько пробелов во втором предложении.
            'Если три и более пробелов, то значит, что во втором предложении
            'больше трёх слов. В "Split" нумерация с нуля, поэтому не стыковка.
        If UBound(Split(myArray(1), " ")) < 2 Then
            'Двигаем конец абзаца в начало документа до троеточия.
            rngSearch.MoveEndUntil Cset:="...", Count:=wdBackward
        End If
        
        With rngSearch.Find
            '1.4. Ищем в начале слова русскую или английскую букву.
            'После буквы должно быть одна или несколько русских или английский букв.
            'Затем тире, а затем тоже самое, но наоборот.
            .Text = "<([А-Яа-яЁёA-Za-z])[А-Яа-яЁёA-Za-z]{1;}-([А-Яа-яЁёA-Za-z])[А-Яа-яЁёA-Za-z]{1;}>"
            'Оставляем то, что в круглых скобках и вставляем дефис.
            .Replacement.Text = "\1-\2"
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
        End With
        
    Next myParagraph


'-----------------------------------------------------------------------------------------------
    '2. Удаляем из слова всё кроме первой буквы и ставим точку.
    
    For Each myParagraph In ActiveDocument.Paragraphs
    
        Set rngSearch = myParagraph.Range
        
        myArray = Split(rngSearch.Text, "... ")
        
        If UBound(Split(myArray(1), " ")) < 2 Then
            rngSearch.MoveEndUntil Cset:="...", Count:=wdBackward
        End If
        
        With rngSearch.Find
            'Ищем в начале слова русскую или английскую букву.
            'Затем одну или несколько русских или английских букв и признак конца слова.
            .Text = "<([А-Яа-яЁёA-Za-z])[А-Яа-яЁёA-Za-z]{1;}>"
            'Заменяем на то, что в круглых скобках и добавляем точку.
            .Replacement.Text = "\1."
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
        End With
        
    Next myParagraph
    
End Sub
В ходе выполнения кода могут быть различные ошибки. Код просто принцип показывает.
Ошибки могут возникнуть, если в абзаце нет троеточия, например, в пустом абзаце нет троеточия. Может ещё что-то может быть - с ходу не могу сказать.

Последний раз редактировалось Скрипт; 22.02.2013 в 23:19.
Скрипт вне форума Ответить с цитированием
Старый 23.02.2013, 08:29   #12
duh96
Пользователь
 
Регистрация: 22.02.2013
Сообщений: 18
По умолчанию Как использовать скрипты в Word'e?

Скрипт, благодарю безмерно!
Лопатил интернет вчера и сегодня. Ничего не могу найти по поводу использования скриптов в Word'e. Это сложная процедура для новичков?
duh96 вне форума Ответить с цитированием
Старый 23.02.2013, 09:47   #13
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

duh96, а какой у вас сейчас вопрос?


Примечание

В "VBA" скрипты называются макросами. Поэтому в интернете нужно искать "макросы для Word". Хотя очень часто макросы стали называть скриптами, т.к. "VBA" начинают заниматься люди из других языков программирования, где макросы называют скриптами.
Но разницы между скриптом и макросом нет - просто разные слова.
Скрипт вне форума Ответить с цитированием
Старый 23.02.2013, 10:33   #14
duh96
Пользователь
 
Регистрация: 22.02.2013
Сообщений: 18
По умолчанию Как использовать макрос в Word'e?

Скрипт, я себе не ясно представляю, в каком направлении смотреть, чтобы увидеть и понять для себя, как применять на практике макросы. В Word'e находил макросы, но не знаю каким файлом сохранять код и как применить его в Word'e.
Должно быть какое-то связующее звено между Вашим кодом и Word'ом для реализации моей задачи или всё гораздо проще?
duh96 вне форума Ответить с цитированием
Старый 23.02.2013, 10:50   #15
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,039
По умолчанию

не знаю каким файлом сохранять код - он или в отдельном файле и работает в нём или в Нормал.дот
как применить его в Word'e - повесить на кнопку, на нажатие сочетаний клавиш, на открытие, закрытие документа
Ципихович Эндрю вне форума Ответить с цитированием
Старый 23.02.2013, 12:10   #16
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

duh96, а какая у вас версия программы "Word" - 2003, 2010 или другая?
Скрипт вне форума Ответить с цитированием
Старый 23.02.2013, 12:23   #17
duh96
Пользователь
 
Регистрация: 22.02.2013
Сообщений: 18
По умолчанию Ошибка скрипта!

Цитата:
Сообщение от Скрипт Посмотреть сообщение
duh96, а какая у вас версия программы "Word" - 2003, 2010 или другая?
MS Office 2010

Вышла следующая ошибка при попытке обработать малую часть текста:


Да, кстати, заметил, что ошибка выходит на строке, в которой идет после троеточия: число, пробел, слово. Потому что, когда убираю само число - код работает.

Например: 7 раз отмерь… 1 раз отрежь

Хотя нет. Почему раз на раз не приходится. Иногда выдает ошибку, иногда нет. Почему, пока не понял. Даже при работе с одними и теми же данными.

Но в общем, всё работает! Буду пробывать. Благодарю. Скрипт, если есть личка: аська или майл, хотелось бы отблагодарить. Нюансы напишу в личку. Жду ответа...

Последний раз редактировалось duh96; 23.02.2013 в 13:00. Причина: Добавление материала
duh96 вне форума Ответить с цитированием
Старый 23.02.2013, 12:35   #18
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,039
По умолчанию

так между прочим Вы опробуете код нажимая Эф8? и когда строка уже отработана в коде наводите курсор на переменную - чтобы узнать что ей присваивается?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 23.02.2013, 12:46   #19
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

duh96, код примерно написан и не учитывает, что могут возникнуть ошибки.
В вашем случае ошибка возникла, т.к. в каком-то абзаце нет троеточия.
Скрипт вне форума Ответить с цитированием
Старый 23.02.2013, 13:18   #20
duh96
Пользователь
 
Регистрация: 22.02.2013
Сообщений: 18
По умолчанию Добавление казахских символов

Да, и еще вопрос касательно кода. Он ведь работает только с русскими и английскими символами. А как добавить к нему работу казахских символов?
duh96 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сократить код Вадим12091965 Microsoft Office Excel 6 28.10.2012 11:04
Текст программы по алгоритму(с подзадачами) на Delphi 7 smokergo Помощь студентам 0 09.06.2012 15:49
Как сделать что бы макрос переходил к следующему циклу sersh1 Microsoft Office Excel 27 25.09.2011 06:58
Как передать фокус следующему по TabOrder'у элементу? TwiX Общие вопросы Delphi 5 11.02.2010 21:44
Как сократить формулу ruavia3 Microsoft Office Excel 18 22.04.2009 16:11