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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2012, 20:43   #1
CrySTaL
 
Регистрация: 18.02.2008
Сообщений: 3
По умолчанию Определить, сколько строк текста в ячейке таблицы

Здравствуйте.
Ситуация такая:
1. В макросе формируется текст произвольной длины
2. В макросе текст вставляется в ячейку заданной в шаблоне таблицы
3. Если текст не помещается в ячейку, то Word разбивает его на несколько строк

Требуется все не поместившиеся строки перенести в следующий ряд таблицы ( пишу макрос для формирования спецификации по ГОСТ )

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

Попробуйте Information(wdFirstCharacterLineNum ber) использовать для определения количество строк текста в одной ячейке:
Код:
Sub Procedure_1()

    Dim rRangeStart As Word.Range, rRangeEnd As Word.Range
    Dim lStart As Long, lEnd As Long
    
    'Создаём два диапазона в оперативной памяти компьютера.
    'Эти диапазоны относятся к ячейке, где находится курсор.
    Set rRangeStart = Selection.Cells(1).Range
    Set rRangeEnd = Selection.Cells(1).Range
    
    'Изменяем диапазон "rRangeEnd", чтобы потом
    'можно было сделать нужное действие.
    rRangeEnd.MoveEnd Unit:=wdCharacter, Count:=-1
    
    'Изменяем диапазон "rRangeEnd".
    'Теперь диапазон представляет собой конец диапазона "rRangeEnd".
    rRangeEnd.Collapse Direction:=wdCollapseEnd
    
    'wdFirstCharacterLineNumber - даёт порядковый номер строки в документе.
    lStart = rRangeStart.Information(wdFirstCharacterLineNumber)
    lEnd = rRangeEnd.Information(wdFirstCharacterLineNumber)
    
    'Чтобы увидеть результат: View - Immediate Window.
    Debug.Print lEnd - lStart + 1
    
End Sub
Скрипт вне форума Ответить с цитированием
Старый 27.12.2012, 23:12   #3
CrySTaL
 
Регистрация: 18.02.2008
Сообщений: 3
По умолчанию

Спасибо. Полезный совет.
А есть ли способ обратиться к коллекции строк в ячейке?
CrySTaL вне форума Ответить с цитированием
Старый 28.12.2012, 16:01   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Цитата:
А есть ли способ обратиться к коллекции строк в ячейке?
не знаю.


С меньшим количеством действий.
Код перемещает курсор в конец первой ячейки первой таблицы.
Код:
Sub Procedure_1()

    Dim rEnd As Word.Range
    Dim oTable As Word.Table
    
    Set oTable = ActiveDocument.Tables(1)
    
    Set rEnd = _
        ActiveDocument.Range(Start:=oTable.Cell(1, 1).Range.End - 1, _
        End:=oTable.Cell(1, 1).Range.End - 1)
    
    rEnd.Select
    
End Sub
Скрипт вне форума Ответить с цитированием
Старый 28.12.2012, 18:26   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

никакой коллекции строк не существует. Нужно перемещаться по строкам, одновременно отслеживая смену ячейки
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 29.12.2012, 22:14   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Делал подобное: http://www.cyberforum.ru/vba/thread724457.html
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 11.01.2013, 11:47   #7
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Можно ещё использовать Information(wdVerticalPositionRelat iveToPage).
Ниже код работает, если курсор находится в ячейке таблицы.
Результат выводится в View - Immediate Window.
Код:
Sub Procedure_1()

    Dim myRange As Word.Range
    
    '1. В оперативной памяти компьютера создаём диапазон "myRange",
        'который содержит информацию о фрагменте документа, где находится ячейка,
        'в которой находится курсор.
    'Т.к. выделено может быть несколько ячеек, то в скобках - Cells(1) -
        'нужно указать порядковый номер ячейки. Даже если выделена
        'всего одна ячейка всё-равно нужно указать в скобках порядковый номер.
    Set myRange = Selection.Cells(1).Range
    
    '2. Смотрим расстояние между началом диапазона и верхом страницы.
    'Хоть в коде и не указано, что нас интересует начало, но
        'анализируется именно начало.
    Debug.Print myRange.Information(wdVerticalPositionRelativeToPage)
    
    '3. В оперативной памяти компьютера изменяем диапазон "myRange".
    'Если в программе Word включить режим отображения непечатаемых
        'символов, то в каждой ячейке видно кружок - знак ячейки.
    'Создаём диапазон, который будет собой представлять место
        'в документе перед знаком ячейки.
    'Если не делать "- 1", то диапазон представляет собой место
        'в документе уже в следующей ячейке.
    myRange.SetRange Start:=myRange.End - 1, End:=myRange.End - 1
    
    '4. Смотрим, на каком расстоянии от верха страницы находится
        'конец диапазона ячейки.
    Debug.Print myRange.Information(wdVerticalPositionRelativeToPage)

End Sub

Последний раз редактировалось Скрипт; 11.01.2013 в 12:18.
Скрипт вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить, сколько гласных введено с клавиатуры и сколько из них символов "а" Romashka) Паскаль, Turbo Pascal, PascalABC.NET 1 06.11.2012 18:27
Данные из таблицы в список, если в ячейке таблицы стоит количество oleg_sh Microsoft Office Excel 4 08.10.2012 14:52
Определить, сколько строк массива имеют максимальное число пробелов vaako Паскаль, Turbo Pascal, PascalABC.NET 8 03.04.2012 15:28
Определить сколько знаков в числе, вычислить сумму цифр и определить старшую цифру Blombox Помощь студентам 5 25.04.2011 15:52
Перенос длинного текста в ячейке таблицы den_1973 HTML и CSS 4 12.10.2010 15:29