Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как измерить количество строк в абзаце

248
07 ноября 2007 года
Dmitry2064
590 / / 06.12.2006
Простенький вопрос (сразу оговорюсь, что в хелпе по VBA лазил и не нашел). Итак. Как измерить кол-во строк в абзаце? А то я навешиваю доп. выделение на абзацы определенного стиля в качестве "шапки". Но только при условии, что в конце нет точки. (типа "интервью такого-то"). Но иногда в конце абзаца в самом интервью авторы не ставят точки, и ессно, такой абзац портится. А так бы я мог подставить проверочное условие числа строк, и если их больше 2, то абзац трогал бы.

Может кто-то навскидку помнит?
В "моем" языке есть команда getlinebreaks. В хелпе VBA по Breaks все другое.

Спасибо.
251
07 ноября 2007 года
SkyMаn
1.7K / / 31.07.2007
так?
ParagraphCount = Split(selection.text,vbCrLf)
248
08 ноября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: SkyM@n
так?
ParagraphCount = Split(selection.text,vbCrLf)



Проверил на абзаце с несколькими строками так:

 
Код:
ParagraphCount1 = Split(Selection.Text, vbCrLf)
ParagraphCount2 = Split(Selection.Text, vbCr)
ParagraphCount3 = Split(Selection.Text, vbLf)
ParagraphCount4 = Split(Selection.Text, vbNewLine)
MsgBox UBound(ParagraphCount1)
MsgBox UBound(ParagraphCount2)
MsgBox UBound(ParagraphCount3)
MsgBox UBound(ParagraphCount4)


Получил всего лишь единичку для vbCR.
Т.е. перенос (перетекание) текста на новую строку вообще ничем не размечается?
Разве так может быть?
251
08 ноября 2007 года
SkyMаn
1.7K / / 31.07.2007
ну а чем тогда простой ВБА-шный метод не подходит?
 
Код:
For cnt=1 To Selection.Paragraphs.Count
msgbox Selection.Paragraphs(cnt)
Next


PS. ;)
248
08 ноября 2007 года
Dmitry2064
590 / / 06.12.2006
Приведенная выше конструкция просто показывает содержимое каждого абзаца, попавшего в выделение. А хотелось бы измерить именно кол-во строк в одном абзаце.
Вроде как потребность не слишком экзотическая, но что-то не могу пока ничего придумать самостоятельно. :o
251
08 ноября 2007 года
SkyMаn
1.7K / / 31.07.2007
Хм, вряд ли получится, ведь строка-то одна. То, что их видно несколько - то это всего лишь визуальный еффект.
248
08 ноября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: SkyM@n
Хм, вряд ли получится, ведь строка-то одна. То, что их видно несколько - то это всего лишь визуальный еффект.



Действительно, интересный факт. Как различать строки в пределах одно абзаца...
А вообще, чем-то кодируется перевод символов на др. строку, если строка не влезает в границы чего-нибудь (рабочего окна, например, или какого-то диалогового окна)?
Т.е. чем определяется то, что в Ворде мы видим правый край абзаца, а не тянем движок горизонтальной прокрутки до бесконечности вправо, чтобы дочитать... "Войну и Мир" до конца.
Чем достигается параметр "перенос по границе окна" (пунктик в настройках Ворда: сервис-параметры-вид)?

251
08 ноября 2007 года
SkyMаn
1.7K / / 31.07.2007
А ничем не кодируется. Перенес строки происходит на уровне компонента. Сам компонен сделан так, что паблик-свойства недоступны для юзера. Разве что АПИшками помучать его...
248
09 ноября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: SkyM@n
А ничем не кодируется. Перенес строки происходит на уровне компонента. Сам компонен сделан так, что паблик-свойства недоступны для юзера. Разве что АПИшками помучать его...


Но в моем языке верстальной программы есть запрос (как я уже упоминал) Getlinebreaks (с указанием типа разрыва строки и кучей всего еще).
Тогда такой вопрос (хотя может и не совсем по теме).
Если мне менять программу верстки с PageMaker (он работает только со своим языком PMScripting Language) на Adobe InDesigne (эта уже поддерживает язык VBS и JS), то в новой программе я не смогу, например, измерять кол-во строк в абзацах? Поскольку язык VBS - урезанная версия VBA?

251
09 ноября 2007 года
SkyMаn
1.7K / / 31.07.2007
Сможешь тогда, когда будешь использовать вместо обычного TextBox'а компонент RichEdit (или другие, похожие свойствами) - там есть такая фича как коллекция Lines.
Там можно например получить строку 2, используя Lines(2)
Ну и так далее, работаешь как с коллекцией: Lines.Item(c), Lines.Count, Lines.Add(s), Lines.Delete(c)....

ЗЫ. Кстати, VBS - это совсем не VBA. Считать так - ошибочно.
248
12 ноября 2007 года
Dmitry2064
590 / / 06.12.2006
Большое спасибо за пояснения. Порыщем и почитаем.
45K
16 ноября 2008 года
sergey625
1 / / 16.11.2008
Цитата: Dmitry2064
Как измерить кол-во строк в абзаце?



 
Код:
Sub LineCount()
Dim StartLine, EndLine As Integer
    With Selection.Paragraphs(1).Range
        StartLine = .Characters(1).Information(wdFirstCharacterLineNumber)
        EndLine = .Characters(.Characters.Count - 1).Information(wdFirstCharacterLineNumber)
    End With
    MsgBox EndLine - StartLine + 1
End Sub


ВАЖНО! Относительно ".Characters.Count - 1":
Вычитать единицу необходимо для случая "внутри таблиц" (внутри ячейки), т.к. иначе (используя .Characters.Count) выделяется вся ячейка и EndLine будет всегда равно StartLine (если быть точным - то для ПОСЛЕДНЕГО параграфа в ячейке).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог