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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2011, 21:18   #1
blackarrow
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 37
Вопрос побочный эффект применения AutoFit к строке

Господа, просьба проконсультировать, кто сталкивался. Похоже одна из вещей, про которые в книгах ничего не найдеш:

Делаю вывод текстовой переменной Х в ячейку (Excel 2007):
With Range("B1")
.Value = X
.Style = "normal"
.HorizontalAlignment = xlJustify
.Rows.AutoFit
End With

При этом в ячейке установлен перенос по словам и на выходе получаем именно то, что нужно – текст на несколько строк строго вписан в ячейку, верхние и нижние границы текста после применения AutoFit идут четко вплотную к верхней и нижней границам ячейки. Идеальная картинка.

Теперь внедряем в сборку текстовой переменной Х константу vbLf, в результате все отлично, но есть нюанс – границы ячейки по вертикали расширяются чуть больше, чем требуется примерно на одну высоту шрифта сверху и снизу. Внутри текста межстрочный интервал не меняется.

Очень хочется разобраться и устранить, т.к. заполняется таким образом по вертикали десяток ячеек, все идут ровно, а у одной с самым длинным текстом (и одной vbLf) такое вот выделяющееся форматирование получается.
blackarrow вне форума Ответить с цитированием
Старый 18.05.2011, 08:17   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от blackarrow Посмотреть сообщение
...границы ячейки по вертикали расширяются чуть больше, чем требуется примерно на одну высоту шрифта сверху и снизу. Внутри текста межстрочный интервал не меняется.
Наверное, лишние vbLf. Поэкспериментируйте:
Код:
Sub rty()
Dim x As String
x = vbLf & "fgh" & vbLf & "rtyrtyrtyr" & vbLf & "nbnmbnm" & vbLf & "erttd" & vbLf
'x = "fgh" & vbLf & "rtyrtyrtyr" & vbLf & "nbnmbnm" & vbLf & "erttd"
With Range("B1")
    If Asc(x) = 10 Then
        .Value = Mid(x, 2, Len(x) - 2)
    Else
        .Value = x
    End If
    .Style = "normal"
    .HorizontalAlignment = xlJustify
    .Rows.AutoFit
End With
End Sub
nilem вне форума Ответить с цитированием
Старый 18.05.2011, 21:12   #3
blackarrow
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 37
По умолчанию

Спасибо за идею, но это не тот случай, там всего одна vbLf и она никак не может оказаться ни в начале ни в конце текста.

Если интересно, решение было найдено совершенно неожиданным образом методом научного тыка. Есть в окне управления форматом ячейки Excel 2007 такой списочек - "направление текста" с выбором: 1. по контексту, 2. слева направо и 3. справа налево. Так вот, по умолчанию там стоит "по контексту", в общем стоит себе и стоит, вроде ни что не влияет. Но вот в комбинации с vbLf таким вот безобразным образом эта опция влияет на управление высотой ячейки по Rows.AutoFit.

Короче, вылечилось добавлением свойства Range .ReadingOrder = xlLTR, т.е. установкой "слева направо" вместо "по контексту".
blackarrow вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подготовка файла для применения автофильтра Andrey-baykov Microsoft Office Excel 4 01.03.2011 15:18
Целесообразность применения out Miha85193 Общие вопросы Delphi 4 18.06.2010 21:00
Есть ли у LoadLibrary и FreeLibrary побочный эффект? BaronTreep Win Api 5 23.08.2009 20:52
Возможна ли функция Include без применения PHP? Igor Bely HTML и CSS 2 07.01.2009 14:58
Область применения переменных ixs Общие вопросы Delphi 2 05.06.2008 18:00