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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 16:51   #1
Agafon
Пользователь
 
Регистрация: 09.11.2010
Сообщений: 12
По умолчанию Вычисление длины строки

Доброго времени суток. Подскажите пожалуйста кто знает, как можно определить длину строки в мм?

Мне это нужно для того, чтобы автоматически изменять размер текста, если он выходит за эти приделы.

Последний раз редактировалось Agafon; 09.11.2010 в 16:54.
Agafon вне форума Ответить с цитированием
Старый 09.11.2010, 17:04   #2
forumWord
Пользователь
 
Регистрация: 23.09.2010
Сообщений: 65
По умолчанию

В Wordе нет объекта "Строка".
Можно определить длину выделенного фрагмента (используя Selection) или нужного диапазона (используя Range).
Что-то в этом роде можно попробовать:
Код:
Sub Макрос1()
Dim ДлинаСтроки As Double
ДлинаСтроки = Selection.Information(wdHorizontalPositionRelativeToPage) - Selection.PageSetup.LeftMargin
MsgBox ДлинаСтроки
End Sub

Последний раз редактировалось forumWord; 09.11.2010 в 17:13.
forumWord вне форума Ответить с цитированием
Старый 09.11.2010, 17:07   #3
Agafon
Пользователь
 
Регистрация: 09.11.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от forumWord Посмотреть сообщение
В Wordе нет объекта "Строка".
Можно определить длину выделенного фрагмента (используя Selection) или нужного диапазона (используя Range).
Хорошо, а какого формата будет результат? Это будет количество символов, или длина в см, или ещё что-то?
Agafon вне форума Ответить с цитированием
Старый 10.11.2010, 04:09   #4
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
Смех

Цитата:
Сообщение от forumWord Посмотреть сообщение
...В Wordе нет объекта "Строка"...
Есть У нее даже свойство "длина" имеется.
Код:
Dim objLine As Line

Set objLine = ActiveDocument.ActiveWindow.Panes(1).Pages(1).Rectangles(1).Lines.Item(1)

    MsgBox "Длина строки: " & objLine.Width
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 10.11.2010, 09:17   #5
forumWord
Пользователь
 
Регистрация: 23.09.2010
Сообщений: 65
По умолчанию

Вождь, можешь расшифровать то, что написал? А то вообще ничего не понятно.
forumWord вне форума Ответить с цитированием
Старый 10.11.2010, 10:28   #6
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

В Word имеется объект Line, с помощью которого можно получить область и размеры любой строки текста в документе. Другое дело, что это не так просто - надо перебирать все строки, чтобы найти нужную.

Важно понимать, что размер строки в каждом режиме просмотра документа свой. А в режимах просмотра без разбивки на страницы, вообще нет строк. Поэтому советую использовать только режим "Разметка страницы".

Еще размер строки не обязательно соответствует размеру текста в строке. Например, в строке может быть рисунок на пол ее длины.

Вот функция для ширины строки с использованием Information:
Код:
Public Function Selection_FirstLineTextWidth() As Single
' возвращает ширину текста в первой выбранной строке, пт
' (-1 при ошибке) (область схлопывается к концу первой строки)

    Selection_FirstLineTextWidth = -1
    On Error Resume Next 
    If Selection Is Nothing Then Exit Function
    
Dim LStart!, LEnd!
    
    ' начало текста строки
    Selection.StartOf Unit:=Word.wdLine, Extend:=Word.wdMove
    LStart = Selection.Information( _
        Type:=Word.wdHorizontalPositionRelativeToTextBoundary)
    ' конец текста строки
    Selection.EndOf Unit:=Word.wdLine, Extend:=Word.wdMove
    LEnd = Selection.Information( _
        Type:=Word.wdHorizontalPositionRelativeToTextBoundary)
    ' ширина текста
    If LEnd >= LStart Then
        Selection_FirstLineTextWidth = LEnd - LStart
    End If
                   
End Function
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 10.11.2010, 10:48   #7
forumWord
Пользователь
 
Регистрация: 23.09.2010
Сообщений: 65
По умолчанию

Agafon,
Цитата:
Хорошо, а какого формата будет результат?
в единицах длины.

Если абзац не имеет выступов, то длину строки вот так надо определять:
Код:
Sub Макрос1()
Dim ДлинаСтроки As Double
ДлинаСтроки = Selection.Information(wdHorizontalPositionRelativeToTextBoundary)
MsgBox ДлинаСтроки
End Sub
Вот ещё вариант, но я не понимаю в нём ничего:
Код:
Sub Макрос1()
MsgBox ActiveDocument.ActiveWindow.Panes(1).Pages(1).Rectangles(1).Lines(1).Width
End Sub
Вождь, вот это мне кажется не нужно:
Код:
LStart = Selection.Information( _
        Type:=Word.wdHorizontalPositionRelativeToTextBoundary)

Последний раз редактировалось forumWord; 10.11.2010 в 13:54.
forumWord вне форума Ответить с цитированием
Старый 10.11.2010, 12:04   #8
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от forumWord Посмотреть сообщение
...вот это мне кажется не нужно:
Код:
LStart = Selection.Information( _
        Type:=Word.wdHorizontalPositionRelativeToTextBoundary)
Это расстояние от края (страницы, столбца, ячейки и т.д.). Если отступ от края нулевой, то да - не нужно. Нужно, когда абзац имеет отступ слева или первой строки, ячейка имеет поле слева и т.д. Вам решать. Моя функция универсальна.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 10.11.2010, 13:45   #9
forumWord
Пользователь
 
Регистрация: 23.09.2010
Сообщений: 65
По умолчанию

Вождь,
Цитата:
Нужно, когда абзац имеет отступ слева или первой строки, ячейка имеет поле слева и т.д.
Теперь я понял, зачем это нужно.
forumWord вне форума Ответить с цитированием
Старый 11.11.2010, 18:11   #10
Agafon
Пользователь
 
Регистрация: 09.11.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от forumWord Посмотреть сообщение

в единицах длины.
А в какой пропорции сочетаются Еденицы длины с пикселями?

Просто в ворде это "пункты", и мне бы хотелось понять сколько это в пикселях

Последний раз редактировалось Agafon; 11.11.2010 в 18:19.
Agafon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция получения длины строки в C# kloffelin Помощь студентам 12 26.10.2010 22:39
Поиск длины строки beda Microsoft Office Word 5 21.06.2010 14:27
Строки неизвестной длины в си abr_question Общие вопросы C/C++ 18 22.01.2010 00:26
Считывание строки неограниченной длины (Си) 0kopok Помощь студентам 6 05.10.2009 20:46