Загадочные абзацы не дающие отступа следующей строки

Программирование на Visual Basic for Applications
theatrped
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.01.2008 (Пт) 17:32
Откуда: Россия

Загадочные абзацы не дающие отступа следующей строки

Сообщение theatrped » 11.01.2008 (Пт) 17:40

В документах Word часто встречаются стркои, которые не дают отступа, даже если вверху двигаешь соответствующий бегунок. Причем в конце предыдущей строки стоит знак абзаца (код Chr (13)). А если кликнуть мышью после этого знака абзаца, то курсор встает после этого знака. (После знака абзаца, который дает отступ следующей строки курсор встать не может). Что це такэ? И как с этим бороться?
Я уже пробовал и заменой через VBA "^p" и через Chrw(13). Бесполезно. Особенно этим косяком грешат электронные книги, для которых я писал макрос по удалению лишних абацей (которые не в конце предложений). Приходистя отступ делать с дополнением 5 пробелов.
Заранее спасибо, интересно - каков же будет ответ. Знает кто-нибедь?
Во всем до самой сути...

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 12.01.2008 (Сб) 23:43

примерчик бы...
Всякое решение плодит новые проблемы.

theatrped
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.01.2008 (Пт) 17:32
Откуда: Россия

Сообщение theatrped » 13.01.2008 (Вс) 18:19

Genyaa писал(а):примерчик бы...

Прикрепляю файл с примером (3 кб) - это уже преобразованная электронная кника. Абзацы такие стали только после преобразования. До этого они обычные.
Код преобразования:

'formirovanie stroki s simvolami dlya zamen
For a = 1040 To 1103
sRusArray = sRusArray & ChrW(a)
Next a

sRusArray = sRusArray & ",;)-"
'zamena
With Selection.find
.ClearFormatting
.Replacement.ClearFormatting
.Wrap = wdFindContinue
.Forward = True
.Format = False
.MatchCase = True

For i = 1 To Len(sRusArray)
myChar = Mid(sRusArray, i, 1)
.Text = myChar & ChrW(13)
.Replacement.Text = myChar & ChrW(32)
.Execute Replace:=wdReplaceAll
Next
.Text = ChrW(13)
.Replacement.Text = ChrW(13) & " "
.Execute Replace:=wdReplaceAll
End With


Интересно, в чем же все-таки косяк...
Вложения
Primer Abzac.rar
(2.79 Кб) Скачиваний: 105
Во всем до самой сути...

theatrped
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.01.2008 (Пт) 17:32
Откуда: Россия

Загадочные абзацы - смайлик съел знаки

Сообщение theatrped » 13.01.2008 (Вс) 18:24

Добавление. В коде сайлик съел "точку с запятой" и "правую скобку".
P.s.: Первое скачивание файла - мое пробное
Во всем до самой сути...

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 14.01.2008 (Пн) 22:47

Попробуйте в макросе вместо ChrW(13) использовать константу vbCrLf.

Или добавьте в конце макроса вот такую строку:

Код: Выделить всё
ThisDocument.Content.Text = Join(Split(ThisDocument.Content.Text, Chr(13)), vbCrLf)


И расскажите о результатах.
Всякое решение плодит новые проблемы.

theatrped
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.01.2008 (Пт) 17:32
Откуда: Россия

Загадочные абзацы - проба vbCrLf

Сообщение theatrped » 17.01.2008 (Чт) 2:02

Genyaa'е
Попробовал с vbCrLf. Попробовал и с предложенной строкой в конце кода. Дает дополнительный символ ChrW(10) (к абзацу). Но курсор все-равно встает после абзаца, а бегунок красной (первой) строки так и не воздействует на строки с таким абзацем (кроме первого "загадочного") - так отступ и не дает.
Повидимому - не вариант. А у Вас получилось?
С уважением, theatrped
Во всем до самой сути...

theatrped
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.01.2008 (Пт) 17:32
Откуда: Россия

Загадочные абзацы - курсор мышью после знаков абзаца

Сообщение theatrped » 17.01.2008 (Чт) 2:07

Причем, курсор встает после знаков абзаца именно мышью. Если перемещать курсор клавиатурой - то он благополучно скачет, как и положено - не вставая после знака абзаца. Что ж за косяк. На работе поделились коллеги, что тоже встречались с такими трудностями (чужих файлов). Справиться не смогли. Наверно, тоже добавляли пробелы или Tab.
Во всем до самой сути...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 17.01.2008 (Чт) 17:28

попробуй заменять
знак абзаца (код Chr (13)).

на Selection.TypeParagraph

заменять - имел в виду удалять и после установки курсора на это место вызывать Selection.TypeParagraph
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

theatrped
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.01.2008 (Пт) 17:32
Откуда: Россия

Загадочные абзацы - TypeParagraph способ известный

Сообщение theatrped » 17.01.2008 (Чт) 23:07

TypeParagraph способ известный. Неудобство в том, что при алгоритме: ищем азцазы-> удаляем-> вставляем TypeParagraph --- очень временнозатратный. С этого спобоса я начинал. Вы представляете сколько уходит времени на преобразование электронной книги в 1000 страниц. А уж какая на экране мультипликация происходит. Но уж, как говориться на безрыбье придется после преобразования все-таки прибегнуть к этому способу замены "загадочных" абзацев.
Но хотелось бы пользоваться заменой символа на какой-то символ абзаца (только нормального). И почему в моем примере такой "косяк" происходит - вот загадка.
Но все равно, спасибо за ответ.
Во всем до самой сути...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 18.01.2008 (Пт) 10:28

theatrped писал(а):]Вы представляете сколько уходит времени на преобразование электронной книги в 1000 страниц

Догадываюсь :)
theatrped писал(а):А уж какая на экране мультипликация происходит.

Хелп ВБА писал(а):ScreenUpdating Property
See Also Applies To Example Specifics

True if screen updating is turned on. Read/write Boolean.

expression.ScreenUpdating
expression Required. An expression that returns an Application object.


абзацы наверное не загадочные, я думаю что для документа ворда символа Chr(13) мало для полноценного абзаца и в TypeParagraph производятся дополнительные телодвижения для ополноценивания абзаца :)
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

theatrped
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.01.2008 (Пт) 17:32
Откуда: Россия

Победа над мультипликацией на экране при работе макроса

Сообщение theatrped » 20.01.2008 (Вс) 2:24

Igor_123
Спсибо за совет. Я быстро разобрался с обновлением экрана - и результат меня порадовал. Действительно, мелькатни не видно. И работать должно быстрее (на тысячах страниц не пробовал). Буду теперь везде SqreenUpdating применять.
Спасибо.
Во всем до самой сути...

theatrped
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.01.2008 (Пт) 17:32
Откуда: Россия

Удаление символов абазаца с заменой

Сообщение theatrped » 20.01.2008 (Вс) 2:30

А как запустить ПОИСК (find) символов Абзацев, чтобы после последнего удаления и замены программа остановилась? Я шел, помнится, каким-то сложным путем (из Казани до Москвы через Сингапур). Теперь уже даже и не помню.
Во всем до самой сути...

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Re: Загадочные абзацы - проба vbCrLf

Сообщение Genyaa » 20.01.2008 (Вс) 12:34

theatrped писал(а):Genyaa'е
Попробовал с vbCrLf. Попробовал и с предложенной строкой в конце кода. Дает дополнительный символ ChrW(10) (к абзацу). Но курсор все-равно встает после абзаца, а бегунок красной (первой) строки так и не воздействует на строки с таким абзацем (кроме первого "загадочного") - так отступ и не дает.
Повидимому - не вариант. А у Вас получилось?
С уважением, theatrped

Вот эта инструкция нормально разбила Ваш документ на абзацы

Код: Выделить всё
ThisDocument.Content.Text = Join(Split(ThisDocument.Content.Text, Chr(13)), vbCrLf)
Всякое решение плодит новые проблемы.

theatrped
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.01.2008 (Пт) 17:32
Откуда: Россия

Re: Загадочные абзацы - проба vbCrLf

Сообщение theatrped » 22.01.2008 (Вт) 1:05

Боюсь сойти за тупого, но у меня все-равно не сработало.
Я делал так: просто добавил внутрь тела процедуры эстроку этого кода и все. Так?
Во всем до самой сути...

theatrped
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 11.01.2008 (Пт) 17:32
Откуда: Россия

Изначально надо ставить "^p"

Сообщение theatrped » 30.01.2008 (Ср) 10:39

Решение (хотя и не совсем то, что я справишивал в теме), как всегда очевидно: надо изначально ставить замену знака абзаца '^p" на этот же знак (соотетвственно с добавление того символа, который нужен: в случае с электронными книгами заменять "у^p" - букву "у" и знак абазаца на букву "у" и знак пробела (Chrw(32)).
Все работает - абзацы возникают такие, какие нужно и управляются бегунком "красной строки". Но вот меняются ли уже созданные "загадочные абзацы" на обычные - нет. Только что попробовал - уже готовые абзацы на обычные не меняются таким образом.
Но хоть изначально можно избежать образования "загадоных абзацев" - уже отлично!
Во всем до самой сути...


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 88

    TopList  
cron