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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2015, 15:55   #1
DBEER
Пользователь
 
Регистрация: 13.03.2014
Сообщений: 76
Злость ? Знатокам: Знак параграфа есть, а самого параграфа нет

Открываем вложенный DOC.
Включаем отображение непечатаемых символов.
Включаем "линейки"
В конце первого абзаца после слова "ВОТ" видим знак "абзац" зеленый.
Встаем курсором на вторую строку - видим по линейке, что отступы настроены так же, как и у первой. НО!!! Красной строки (отступа) реально нет.
Синий фрагмент получен копированием красного, но при стирании зеленого "абзаца" и нажатии ENTER все встает на места - у Второй строки появляется отступ.
В объектной модели не смог найти отличия между параграфами (Select..Parag..(1)...)
В VBA выделяю весь красный текст, в окне Immediate ввожу:
Код:
Selection.Paragraphs(1).Range.Select
Выделяются ТРИ строки (длинная ПЕРВАЯ и Вторая строка вплоть до зеленого знака абзаца)

Эта же операция с синим фрагментом дает ожидаемый рез-т - выделяется только Первая строка до слова ВОТ.
Понятно, что дело в "зеленом" знаке абзаца, но в чем?

Уперся в этот случай потому, что программно через макрос форматирую выделяемый фрагмент и везде все хорошо (абзацы с отступами), а здесь - кранты. И такие случаи в текстах, набиваемых пользователями нередки.
Программно выделить такую ситуацию не смогаю пока.
М.б. кто что знает?
Вложения
Тип файла: rar Пример Тыры-пыры.rar (4.6 Кб, 11 просмотров)
DBEER вне форума Ответить с цитированием
Старый 05.02.2015, 22:15   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Перевод строки как-то попадает внутрь абзаца. Экспериментальным путём нашёл один способ получить: из буфера вставляем текст, где есть символы как CR+LF, так и отдельно CR - тогда CR+LF становятся границами абзацев, а CR без LF остаются как CR внутри абзаца.
Somebody вне форума Ответить с цитированием
Старый 06.02.2015, 10:20   #3
DBEER
Пользователь
 
Регистрация: 13.03.2014
Сообщений: 76
По умолчанию Лечение травами (ну, и без клизмы не обошлось)

Действительно, происходит проблема из копирования через COPY-PAST.
Наощупь нашел ситуацию в кодах ASCII.
Наверное, грамотней было бы сразу искать "одинокий" CR без LF и заменять его на CR+LF, но чёт не изгальнулось.
Лечение придумал такое:
'********************************** ******************
Код:
''' Замена знаков абзаца на новые
    Selection.Find.Replacement.ClearFormatting
     With Selection.Find
         .Text = Chr(13)
         .Replacement.Text = "#"
         .Forward = False ' True
         .Wrap = wdFindStop
         .Format = False
         .MatchCase = False
         .MatchWholeWord = False
         .MatchAllWordForms = False
         .MatchSoundsLike = False
         .MatchWildcards = True
     End With
     Selection.Find.Execute Replace:=wdReplaceAll

    Set RR = Selection.Range
     With Selection.Find
         .Text = "#"
         .Forward = True
         .Wrap = wdFindStop
         .Format = False
         .MatchCase = False
         .MatchWholeWord = False
         .MatchAllWordForms = False
         .MatchSoundsLike = False
'         .MatchWildcards = True
     End With
Sel:
    RR.Select
    If Selection.Find.Execute = True Then
        Selection.Delete
        Selection.TypeParagraph
        GoTo Sel
    End If
Вот здесь почему-то после замены (см.выше) после знака абзаца появляется пробел. Приходится опять изгибаться:
Код:
''' Замена пробел+абзац на абзац
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "^p "
        .Replacement.Text = "^p"
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
Не бог весть, но работает.
DBEER вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OLE MS Word номер текущего абзаца (Параграфа) extremaler C++ Builder 1 10.03.2012 20:28
Вывод слов параграфа разным шрифтом и цветом miatu Microsoft Office Word 1 04.09.2009 13:26
Есть чат на яваскрипте.не могу поставит знак +;Хотя люди его как то ставят, просто мой знак + заменяется maksim1983 JavaScript, Ajax 4 23.02.2009 07:55
Есть или нет MAcK SQL, базы данных 3 27.05.2008 14:45
Pascal//определить длину самого короткого и самого длинного слова в строке ShnurOK Помощь студентам 2 16.12.2007 10:43