Страницы: 1
RSS
Как изменить высоту строки в VB
 
Подскажите, плиз. Как заставить ячейку автоматически менять свою высоту в зависимости от того сколько символов введено в ячейку? К примеру: есть ячейка A1 на листе "стр1", которая ссылается на значение ячейки В2 листа "стр3". Лист "стр1" защищен от изменений. В ячейку В2 вводятся серийные номера оборудования (иногда их очень много - до 8 штук). Поэтому когда вводим много номеров, то в ячейке А1 весь текст не вмещается и надо в рукопашную менять высоту строки. Мне очень надо прописать это в VB.  
 
Спасибо заранее.
 
Sub AutoFit()  
Range("A1").WrapText = True  
Range("A1").EntireRow.AutoFit  
End Sub  
 
Это всё запиши в модуле листа, где находится непослушная ячейка А1. И будет тебе счастье))  
Удачи!
 
А как сделать с объединёнными ячейками?
 
Как сделать то же самое только с объединёнными ячейками???
 
{quote}{login=dsapa}{date=25.06.2008 07:54}{thema=}{post}Sub AutoFit()  
Range("A1").WrapText = True  
Range("A1").EntireRow.AutoFit  
End Sub  
 
Это всё запиши в модуле листа, где находится непослушная ячейка А1. И будет тебе счастье))  
Удачи!{/post}{/quote}  
 
Уважаемый dsapa.  
К сожалению это не сработало. Я прикрепил файл с примером тог, что мне необходимо. Может кто-то доведет его до работоспособности.  
Заранее благодарен.
 
Лови файлик. У меня работает как часики. Проверь. Жду замечаний
 
Sub AutoFit()  
Range("A1").WrapText = True  
Range("A1").EntireRow.AutoFit  
End Sub  
Уважаемый dsapa.  
Как сделать то же самое только с объединёнными ячейками???
 
назови, какие ячейки в листе должны быть объединены?  
p.s. прошу, не надо меня "уважать". Мне только 16 лет, не привык, чтобы называли уважаемым ))). Можно даже на "ты".
 
по идее, объединенная ячейка принимает адрес левой верхней ячейки. Поэтому можно попробовать объединенную ячейку обозвать левой верхней.
 
Ячейки в строке любые (примерно с A1:C1)
 
Дело в том, что с объеденёнными ячейками эта функция не работает. Попробуй!!!
 
{quote}{login=dsapa}{date=26.06.2008 11:46}{thema=}{post}Лови файлик. У меня работает как часики. Проверь. Жду замечаний{/post}{/quote}  
 
Заработало!!!  
Очень благодарен за помощь.
 
Ответьте пожалуйста на мой вопрос!!!
 
{quote}{login=Ан13}{date=26.06.2008 02:24}{thema=Как изменить высоту строки в VB}{post}Ответьте пожалуйста на мой вопрос!!!{/post}{/quote}  
 
Смотрите код.  
 
Sub RowHeightFiting3()  
' Объединённая ячейка должна быть активной!!!  
' Если требуется подобрать высоту для неактивной ячейки, то нужно переменной MyRanAdr присвоить ПОЛНЫЙ адрес области объединённой ячейки '(Напр, MyRanAdr = "D4:G7" вместо строки MyRanAdr = ActiveCell.MergeArea.Address)  
Application.ScreenUpdating = False  
 
Dim MyNormalMiddleWidth, MyNormalEdgeWidth  
Dim c1, c2, w1, w2 'временные переменные ширин столбцов в симв и пт  
Dim MyTempCell As Range  
Dim OldColWidth  
Set MyTempCell = Cells(65536, 256)  
OldColWidth = MyTempCell.ColumnWidth  
c1 = 10 ' ширину в симв можно установить любую, но точно не менее 1 (где нельзя реально определить нужные нам данные),  
c2 = 15 ' и лучше более 3 и целочисленные (для уменьшения влияния ошибки округления..... впрочем, в коде эта возможная ошибка учитывается)  
MyTempCell.ColumnWidth = c1  
c1 = MyTempCell.ColumnWidth  
w1 = MyTempCell.Width  
MyTempCell.ColumnWidth = c2  
c2 = MyTempCell.ColumnWidth  
w2 = MyTempCell.Width  
MyNormalMiddleWidth = Format((w2 - w1) / (c2 - c1), "#0.00")  
MyNormalEdgeWidth = Format((c2 * w1 - c1 * w2) / (c2 - c1), "#0.00")  
MyTempCell.ColumnWidth = OldColWidth  
Dim MyRanAdr As String  
Dim MergeAreaTotalHeight, NewRH  
Dim MergeAreaFirstCellColWidth, MergeAreaFirstCellColHeight  
MyRanAdr = ActiveCell.MergeArea.Address 'адрес области с объединённой ячейкой  
MergeAreaTotalHeight = Range(MyRanAdr).Height ' высота всей объединённой ячейки в ед. пт  
MergeAreaFirstCellColWidth = Range(MyRanAdr).Cells(1, 1).EntireColumn.ColumnWidth ' ширина первого столбца в объединённой ячейке  
MergeAreaFirstCellColHeight = Range(MyRanAdr).Cells(1, 1).EntireRow.RowHeight ' высота первой строки в объединённой ячейке  
Range(MyRanAdr).Cells(1, 1).ColumnWidth = (Range(MyRanAdr).Width - MyNormalEdgeWidth) / MyNormalMiddleWidth 'установка ширины первого столбца объед. ячейки равной общей ширине объед. ячейки '''БЕЗ ПОДГОНКИ!!!  
Range(MyRanAdr).WrapText = True  
Range(MyRanAdr).MergeCells = False  
Range(MyRanAdr).Cells(1, 1).EntireRow.AutoFit  
NewRH = Range(MyRanAdr).Cells(1, 1).EntireRow.RowHeight  
Range(MyRanAdr).MergeCells = True  
Range(MyRanAdr).Cells(1, 1).EntireColumn.ColumnWidth = MergeAreaFirstCellColWidth  
If NewRH < MergeAreaTotalHeight Then 'если новая высота меньше изначальной, то оставляем изначальную высоту!  
Range(MyRanAdr).Cells(1, 1).EntireRow.RowHeight = MergeAreaFirstCellColHeight  
Else  
Range(MyRanAdr).Cells(1, 1).EntireRow.RowHeight = NewRH - (MergeAreaTotalHeight - MergeAreaFirstCellColHeight) ' для 1st строки в объед.ячейке  
End If  
'Range(MyRanAdr).EntireRow.RowHeight = NewRH / Range(MyRanAdr).Rows.Count 'для равной высоты всех строк в объед.ячейке (вместо предыдущего блока If)  
Application.ScreenUpdating = True  
End Sub
 
Спасибо Дмитрий!  
Всё работает. Ещё вопросик.  
Можно сделать чтобы эта функция обрабатывала несколько строк сразу (допустим A1:C1, A2:C2)
 
{quote}{login=Ан13}{date=26.06.2008 04:15}{thema=Как изменить высоту строки в VB}{post}Спасибо Дмитрий!  
Всё работает. Ещё вопросик.  
Можно сделать чтобы эта функция обрабатывала несколько строк сразу (допустим A1:C1, A2:C2){/post}{/quote}  
Но это уже на сообразительность, всё элементарно - думайте!  
Но код я выложил, чтобы  Вы его оптимизировали.  
Два варианта:  
До 255 символов в объединенной ячейке, и более 255 символов.
 
Добрый день! У меня вопрос по работе кода в этой теме.  
У меня на листе excel размещена форма договора, в котором построчно надо сделать подбор высоты объединенных ячеек.  
Для использования выложенного здесь кода я отдельной строкой указала области для подгонки (Private Const MyAreas$ =...). Код отрабатывает, однако подгонка идет не слишком корректно: по нижней границе текст не влезает (см. вложение).  
Подскажите, пожалуйста, как можно сделать подгонку корректной?  
 
P.S. я изначально пробовала другой способ: изменяла высоту в зависимости от количества строк текста в ячейке (кол-во строк * на фиксированную высоту). При этом количество строк определялось с помощью формул на листе. И все бы хорошо, да только цифры в линейке, видимо, отличаются от пикселей, потому что в итоге высота получалась гарантированно большей, чем должна была быть (во вложении также есть, закомментированно)
 
Прошу прощения - вопрос снимается. Виновник в лице закрепления областей и недорезанного макроса найден. :)
 
только сегодня выкладывал обновления:  
 
http://www.planetaexcel.ru/forum.php?thread_id=23911&page_forum=3&allnum_forum=62  
 
Если нужна функция (процедура) для использования в VBA смотрите последний пост. Если надстройка, то выше.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
\в файле
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1
Читают тему
Loading...