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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2013, 13:40   #1
Serg_2013
Новичок
Джуниор
 
Регистрация: 28.03.2013
Сообщений: 3
По умолчанию Проверить "целостность" выделения абзацев в Word 2010

Приветствую.

Пишу макрос, который должен произвести некие действия с выделенным фрагментом текста. Для работы этого макроса важно, чтобы пользователь выделил 1 или более абзацев ЦЕЛИКОМ (а не слова/фразы внутри абзацев). Соответственно, макрос должен начинаться с IF-проверки выполнения этого необходимого условия.

Подскажите, пожалуйста, какой-нибудь простой и корректный способ выполнения этой проверки.
Serg_2013 вне форума Ответить с цитированием
Старый 28.03.2013, 14:13   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Serg_2013, признаком абзаца в программе "Word" является символ "Знак абзаца".

Т.е. макрос должен смотреть, есть справа и слева знаки абзаца. Если есть, значит выделен абзац, если нет, значит не выделен абзац.
Скрипт вне форума Ответить с цитированием
Старый 28.03.2013, 14:23   #3
Serg_2013
Новичок
Джуниор
 
Регистрация: 28.03.2013
Сообщений: 3
По умолчанию

Цитата:
Т.е. макрос должен смотреть, есть справа и слева знаки абзаца. Если есть, значит выделен абзац, если нет, значит не выделен абзац.
Спасибо. Напишите, если не сложно, выражение, возвращающее символ, стоящий непосредственно ПЕРЕД Selection.
Serg_2013 вне форума Ответить с цитированием
Старый 28.03.2013, 14:29   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Вывод результата в View - Immediate Window:
Код:
Sub Procedure_1()

    Debug.Print Asc(Selection.Characters.First.Previous.Text)

End Sub
Скрипт вне форума Ответить с цитированием
Старый 28.03.2013, 14:32   #5
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Previous и не Толька

Попробуйте извлечь пользу из моих получасовых изысканий! Вот отчёт.
Код:
Sub WholeThePar()
    With Selection.Range.Characters
        'если 1-й символ в выделенном не является 1-м в документе
        If .First <> ActiveDocument.Range.Characters.First Then
            If Asc(.Last) = Asc(.First.Previous) Then
                If Asc(.Last) = 13 Then
                    MsgBox "Пользователь выделил весь абзац!"
                End If
            End If
        'если 1-й символ в выделенном является 1-м в документе: смотрим код последнего
        Else
            If Asc(.Last) = 13 Then MsgBox "Пользователь выделил весь абзац!"
        End If
    End With
End Sub
(По моим оценкам, вышеизложенный код говорит правду.)

Цитата:
Сообщение от Скрипт Посмотреть сообщение
Вывод результата в View - Immediate Window
А вот, кстати, и иллюстрация:
Изображения
Тип файла: jpg WhatIsWhatInSelection.jpg (51.5 Кб, 141 просмотров)
Sasha_Smirnov вне форума Ответить с цитированием
Старый 28.03.2013, 14:38   #6
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Вариант, основанный на использовании "Range":
Код:
Sub Procedure_1()

    If Selection.Start = Selection.Paragraphs(1).Range.Start And _
            Selection.End = Selection.Paragraphs.Last.Range.End Then
        MsgBox "Выделен абзац или абзацы целиком."
    End If

End Sub
Скрипт вне форума Ответить с цитированием
Старый 28.03.2013, 14:41   #7
Serg_2013
Новичок
Джуниор
 
Регистрация: 28.03.2013
Сообщений: 3
По умолчанию

Скрипт, Sasha_Smirnov: спасибо! То, что надо!

Последний раз редактировалось Serg_2013; 28.03.2013 в 14:43.
Serg_2013 вне форума Ответить с цитированием
Старый 28.03.2013, 14:56   #8
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Serg_2013, только нужно ещё учитывать, что есть разные способы выделения:
  1. просто выделение мышью;
  2. выделение с использованием клавиши "Ctrl".
Если выделено с помощью клавиши "Ctrl", то информацию узнать можно только о последнем выделенном фрагменте. Чтобы узнать информацию обо всём выделенном фрагменте - нужно выделить каким-нибудь цветом и проанализировать фрагмент документа, выделенный специальным цветом.
Скрипт вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04