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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2012, 18:15   #1
gurya
 
Регистрация: 17.12.2012
Сообщений: 3
По умолчанию Макросы VBA Word

1. В текстовом документе найти первое слово начинающаеся на гласную букву
2.в текущем абзаце выделить предложение сод-е наименьшее кол-во слов
Прошу помощь написать макросы. Если не сложно, дайте объяснения к своим вариантам, я новичок в VBA.
gurya вне форума Ответить с цитированием
Старый 18.12.2012, 05:22   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

1. Делается поиском <[аеиоуэюяё][! \?\!\.\,\:\;]*>. Подстановочные знаки включены. Поиск записать макросом.
2
Код:
Sub WordsMinimum()
    Dim i As Long 'Переменная, хранящая минимальное количество слов
    Dim oPar As Paragraph 'Переменная, для хранения текущего абзаца
    'Запись в переменную абзаца, в котором находится курсор
    Set oPar = Selection.Paragraphs.First
    
    Dim oRng As Range 'Переменная для предложений
    'Инициализация переменной. Не особенно важно,
    'что записывать в эту переменную, я предпочитаю так
    Set oRng = ActiveDocument.Content
    oRng.SetRange oPar.Range.Start, oPar.Range.Start
    
    'Цикл, для перебора предложений в абзаце.
    'Предложения определяются по знакам препинания
    Do While True
        'Расширение диапазона до следующего знака препинания
        oRng.MoveEndUntil ".?!"
        'Если слов в текущем предложении меньше, чем ранее
        If i > oRng.Words.Count Then
            i = oRng.Words.Count 'Переписываем значение переменной
            oRng.Select 'Выделяем предложение
        End If
        'Если не вышли за конец абзаца
        If oRng.End <= oPar.Range.End Then
            'Смещаем диапазон к следующему предложению
            oRng.MoveUntil " "
        Else
            'Если вышли — выход из цикла
            Exit Do
        End If
    Loop
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 18.12.2012, 11:31   #3
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

По пункту 1 я бы выбрал другой шаблон поиска:
([АЕИОУЭЮЯЁаеиоуэюяё])([А-ЯЁа-яё]{1;})
тогда будет найдено как слово начинающиеся со строчной гласной, так и с прописной гласной, так и слово состоящее из прописных букв полностью

Последний раз редактировалось Пименов Александр; 18.12.2012 в 11:37. Причина: Изменение текста
Пименов Александр вне форума Ответить с цитированием
Старый 18.12.2012, 11:38   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Абсолютно верное замечание. Спасибо
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 19.12.2012, 19:20   #5
gurya
 
Регистрация: 17.12.2012
Сообщений: 3
По умолчанию

в текущем абзаце в самом коротком слове в самом коротком предложении поменять порядок следования букв на обратный, а вот такая задача?
gurya вне форума Ответить с цитированием
Старый 20.12.2012, 02:26   #6
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию А совершенству есть предел?..

Цитата:
Сообщение от Пименов Александр Посмотреть сообщение
По пункту 1
<[АЕИОУыЭЮЯЁаеиоуЫэюяё]*>
Находит в заголовке этого поста слово А (а не есть, как было бы по вашему шаблону).
Sasha_Smirnov вне форума Ответить с цитированием
Старый 20.12.2012, 04:00   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от gurya Посмотреть сообщение
в текущем абзаце в самом коротком слове в самом коротком предложении поменять порядок следования букв на обратный, а вот такая задача?
Я не понял, у нас тут передача "А вам слабо?" Мало того, что вы даже не благодарите за сделанную для вас работу, так ещё и в назойливой форме предлагаете следующее задание.
Отвечаю. Эта задача тоже выполнима. Как и многие другие, о которых вы пока что не имеете понятия.

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
<[АЕИОУыЭЮЯЁаеиоуЫэюяё]*>
Находит в заголовке этого поста слово А (а не есть, как было бы по вашему шаблону).
Действительно. Только я не пойму как этот шаблон работает. По моим представлениям он должен находить только слова из гласных букв, но он находит все. Почему?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 20.12.2012, 04:16   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Отвечаю. Эта задача тоже выполнима.
И даже есть код*!
Цитата:
Сообщение от viter.alex Посмотреть сообщение
...но он находит все. Почему?
Алекс, сам не ожидал! Жаль, ТС не оценит всю красоту момента...

Вообще-то, это подстановочный знак * так здорово работает.

________________________
* я было решил, что вполне адекватный (я ж старался!), однако вот что, зараза, он выдал:
Изображения
Тип файла: png main-word.png (3.5 Кб, 92 просмотров)

Последний раз редактировалось Sasha_Smirnov; 20.12.2012 в 04:48.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 20.12.2012, 04:34   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Вообще-то, это подстановочный знак * так здорово работает.
Понятно, что это он так работает. Но почему? Делает чужую работу, так сказать. Прямо как мы за ТС
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 20.12.2012, 04:42   #10
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Тёзка, тов. gurya подаёт нам хороший пример: отдохнуть, послушать пение птиц и певиц.

<[АЕИОУыЭЮЯЁаеиоуЫэюяё]*> означает "гласная в начале слова и что угодно* в конце"

____________
* хоть бы даже и вовсе ничего: то есть та же гласная и в конце
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макросы Word gurya Помощь студентам 0 17.12.2012 18:11
Макросы в VBA Ninaaa Фриланс 3 09.12.2011 07:27
Макросы в VBA Aleks2215 Microsoft Office Excel 1 07.11.2010 20:15
Макросы в Word julietteka Помощь студентам 0 22.03.2010 21:24
макросы на VBA AFA Microsoft Office Word 1 14.07.2009 14:19