|
|
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Есть несколько объедененных ячеек в Excel. Закидываю в них строку разделенную Enter-ами. Как мне программно 1) Выставить высоту строки под то что в нее записываю (по аналогии с AutoFit для столбца) Пробовал Rows(1).EntireRow.AutoFit() - не проходит. :-( 2) Узнать размер запиываемого текста по ширине Всем спасибо. ЗЫ че то не нашел я форума именно по VBA поэтому написал тут... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 16:03:45 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Сделать все руками, записав в виде макроса, а потом отредактировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 16:06:50 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Не понял. Что в виде макроса? Говорю ж не работает AutoFit. Единственный способ который вижу - программно выставить Width для строки. Но вот какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 16:08:35 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Петров Андрей 1) Выставить высоту строки под то что в нее записываю (по аналогии с AutoFit для столбца) Пробовал Rows(1).EntireRow.AutoFit() - не проходит. :-( 2) Узнать размер запиываемого текста по ширине 1. Код: plaintext 1. 2. Код: plaintext Символ перевода строки Chr(10) тоже считается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 16:17:26 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
MsgBox Len(Range("A2")) Читайте внимательнее не ДЛИНУ а ширину текста. Текст может состоять из большого количества строк... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 16:20:39 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Вариант Rows("1:1").RowHeight = 20 Rows("2:2").AutoFit Не проходит. Все автофитится в одну строку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 16:23:35 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Или Rows("1:1").RowHeight = 20, или Rows("2:2").AutoFit. Попробуй просто. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 16:47:57 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
авторЕдинственный способ который вижу - программно выставить Width для строки. Но вот какой? Мдась. Еще раз говорю - ВНИМАТЕЛЬНЕЕ читайте! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 17:12:34 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Это как раз один из тех вопросов, которые задать гораздо проще, чем точно ответить . Поэтому ответ будет оценочным. весь нижеприводимый vba-код будет писаться с листа, без проверки. Претензии по качеству, работоспособности и необъявленности переменных - не принимаются. @:) ------------------ Упрощающие предположения: Пусть весь текст в интересующей нас ячейке набран с использованием единственного шрифта. Пусть для начала будет не авторнесколько объедененных ячеек, а одна единственная ячейка, размеры которой и будем пытаться определить. И текст в ней пусть "разделен" не авторEnter-ами, а "нормальными" CHR(10). Как я понимаю, ширину надо подобрать такую, чтобы умещалась максимально длинная подстрока, разделяемая по chr(10). определяем длину этой подстроки Set tR = Selection s=tR.Value2 lFontSize=tR.Font.Size v=Split(s,chr(10)) maxlen=0 for iNdex=0 to Ubound(v) If len(v(iNdex)) > maxlen Then maxlen=len(v(iNdex)) next определяем приблизительную ширину клетки без учета жирности, отступа и т.д. widthlen = maxlen * (1.06)' в ширинах цифры 0 "нормальным стилем" + потолочное усреднение ширины. вычислияем высоту клетки. количество предполагаемых строк wishedRows=Ubound(v)+1 высота строки приблизительно ( без учета вертикальных отступов для "нормального стиля") newAllRowsHeight= wishedRows(lFontSize + 2.75) устанавливаем размер клетки With tR .ColumnWidth=widthlen .RowHeight=newAllRowsHeight End With привести эту оценку к виду, пригодному для использования на объединенном наборе клеток, а также улучшить оценку на жирность, разношрифтовость текста в клетке, отступы и прочие красивости предоставляется читателю. (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 02:22:19 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Victosha! В этой строке Код: plaintext забыл умножить. Код: plaintext Твой метод работает на необъединенной ячейке. Если ячейка объединена то вываливается ошибка 13 на строке: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 09:30:16 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Пользователь2<...> забыл умножить. так не принимается же :)) Пользователь2 Твой метод работает на необъединенной ячейке. Код: plaintext отображаемое значение объединенного диапазона содержится в первой клетке диапазона. Ширина и высота объединенного диапазона равна сумме ширин и высот входящих в него клеток. Только занимается распределением потребных значений на входящие количества пусть тот, кому это нать. +2.5 - это оценка межстрочного интервала для шрифта 10 - то есть как будто д.б. то-то около 0.25*lFontSize. Но и в этом месте пусть задумывается не я. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 09:49:07 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Victosha, я сделал подбор высоты исходя из количества символов Chr(10) в строке. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 10:39:09 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Понятно. Предлагается считать количество энтеров - и умножать его на высоту шрифта. Те ответ на вопрос темы - только руками. А жаль. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 15:16:20 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Теперь почеу я сразу так не сделал. Представим себе ситуацию что строка состоит из текста без Enter(ну или 10 не суть) но переноситься она все равно будет. в зависимости от размера объедененной области. Как тогда быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 15:18:15 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Что получилось у меня и чем пока пользуюсь. Описание кода, по возможности подробное, в самом коде. Sub RowHeightFiting1() ' Объединённая ячейка должна быть активной!!! Application.ScreenUpdating = False Dim MyRanAdr As String Dim MergeAreaTotalWidth, MergeAreaTotalHeight Dim MergeAreaFirstCellColWidth, MergeAreaFirstCellColHeight Dim SumCW, SumRH Dim i As Integer Dim NewRH Dim dCW ' MyRanAdr = ActiveCell.MergeArea.Address 'адрес области с объединённой ячейкой MergeAreaTotalWidth = Range(MyRanAdr).Width ' ширина всей объединённой ячейки в ед. пт MergeAreaTotalHeight = Range(MyRanAdr).Height ' высота всей объединённой ячейки в ед. пт MergeAreaFirstCellColWidth = Range(MyRanAdr).Cells(1, 1).EntireColumn.ColumnWidth ' ширина первого столбца в объединённой ячейке MergeAreaFirstCellColHeight = Range(MyRanAdr).Cells(1, 1).EntireRow.RowHeight ' высота первой строки в объединённой ячейке ' подсчёт суммарной ширины объед. ячейки в единицах ColumnWidth SumCW = 0 For i = 1 To Range(MyRanAdr).Columns.Count SumCW = SumCW + Range(MyRanAdr).Columns(i).ColumnWidth Next ' Установка ширины первого столбца равной суммарной ширины объед. ячейки плюс поправка ' Поправка состоит из количества как бы "убранных" столбцов, умноженной на корректировочный коэффициент Range(MyRanAdr).Cells(1, 1).ColumnWidth = SumCW + (Range(MyRanAdr).Columns.Count - 1) / 1.2 ' 1.2=3.75 / 4.5 ' корректировочный коэффициент возникает из-за "краёв" каждого столбца 'далее, при необходимости, максимально точная подгонка dCW = 0.1 ' шаг изменения ширины столбца в единицах ColumnWidth при подгонке sgndcw = Sgn(MergeAreaTotalWidth - Range(MyRanAdr).Cells(1, 1).Width) SumCW = Range(MyRanAdr).Cells(1, 1).ColumnWidth While sgndcw * (MergeAreaTotalWidth - Range(MyRanAdr).Cells(1, 1).Width) > 0 SumCW = SumCW + dCW * sgndcw Range(MyRanAdr).Cells(1, 1).EntireColumn.ColumnWidth = SumCW Wend While MergeAreaTotalWidth - Range(MyRanAdr).Cells(1, 1).Width < 0 SumCW = SumCW - dCW Range(MyRanAdr).Cells(1, 1).EntireColumn.ColumnWidth = SumCW Wend ' хотя, вообще-то, обычно эта часть процедуры не нужна ' просто на случай, если поправка к ширине первого столбца вдруг окажется неверной. Напр., из-за того, что ширина стольца меняется дискретно с шагом 0.167, но не всегда, напр., на узких ячейках (примерно < 2 симв.) поправка врёт. ' форматирование ячейки (устан. опции перенос текста и разобъединение ячейки) 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).EntireRow.RowHeight = NewRH - (MergeAreaTotalHeight - MergeAreaFirstCellColHeight) ' Если нужно выровнять высоту строк, то можно использовать что-нибудь типа 'Range(MyRanAdr).EntireRow.RowHeight = NewRH / Range(MyRanAdr).Rows.Count ' установка изначальной ширины первого столбца Range(MyRanAdr).Cells(1, 1).EntireColumn.ColumnWidth = MergeAreaFirstCellColWidth Application.ScreenUpdating = True L: ' усё i = MsgBox("Das ist Fantastisch!" & Chr(10) & "Stimt das?", vbYesNo) If i = vbNo Then GoTo L End Sub Глюков пока не замечал, но и не фантазировал в способах проверки Впрочем, при большом количестве узких (менее примерно 3 симв) столбцов, входящих в объединённую ячейку или находящемся в ней длинном (более 100-150 символов) тексте (например, xls-фактуры, вытянутые из Консультант-плюс) может происходить следующее: 1. Новая высота объединённой ячейки выставляется как бы чуть-чуть "с запасом", т.е. больше, чем надо. Особенно в печатном виде. Но это, похоже, проблема самого Excelя. 2. Точная подгонка занимает ОЧЕНЬ много времени (более секунды). Просто процедура (там, где блок с While и написано, что эта часть обычно не используется) написана "в лоб" и совершенно неоптимизирована. Оставляю эту часть желающим на доделку. Или доделаю потом сам. Модератор: Сообщение было отредактировано по просьбе автора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 18:30:27 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Код ниже немного подкорректирован, а именно: 1. Уточнена формула расчёта ширины одного столбца (в символах), равной общей ширине объед. ячейки 2. Удалены не очень нужные процедуры (лишние расчёты, подгонка) в соотвествии с п.1 и из предположения, что общая ширина объед. ячейки больше 1 (симв). 3. Удалены комментарии и прочее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Код проверен в рабочих условиях, без хитрых изысков. Код простой, пояснения не требует. Кроме, пожалуй, строки с Range(MyRanAdr).Cells(1, 1).ColumnWidth = (Range(MyRanAdr).Width - 3.75) / 4.5. Здесь: 3.75 - размер "боковушек" у ячейки (ширина в пт); 4.5 - ширина в пт одного символа стиля Normal ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 18:03:13 |
|
||
|
Как выставить ширину строки
|
|||
|---|---|---|---|
|
#18+
Мой предыдущий ответ с подкорректированным кодом имеет очень жуткий недостаток. Он работает только с тем стилем Normal, для которого рассчитаны коэффициенты ширин символа и краёв столбца. В данном случае - шрифт Times New Roman Cyr 10пт. tolikt Range(MyRanAdr).Cells(1, 1).ColumnWidth = (Range(MyRanAdr).Width - 3.75) / 4.5 Здесь: 3.75 - размер "боковушек" (отступов по краям) у ячейки (ширина в пт); 4.5 - ширина в пт одного символа стиля Normal (т.е. единицы измерения методом ColumnWidth) И если невнимательно прочитать два предыдущих поста , а сразу воспользоваться кодом, то на других стилях Normal возможно неверное выполнение кода. И про эту особенность я забыл упомянуть. Теперь исправляю. Сначала отдельно выкладываю код MiddEdgeWidth с комментариями. Он определяет ширину в пт середины и краёв для стиля Normal в активной рабочей книге. А после - RowHeightFiting3 - итоговый код подгонки высоты объединённой ячейки с учётом текущего стиля Normal. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. Замечания. Метод Autofit выставляет высоту строки "с запасом". Т.е. например: Шрифт Times New Roman Cyr 10пт визуально прекрасно входит в строку высотой 10.50. Но Autofit высталяет высоту 12.75. А, напр., в документах с большим количеством строк эти "вынужденные излишества" мешают - искажают (увеличивают) размер документа. Поэтому я на практике применяю сначала Autofit к какой-либо пустой ячейке той же строки, что и первая строка объединённой ячейки и отформатированной так же, как и текущая объединённая. И после Autofit объединённой ячейки выставляю высоту строки за минусом разницы между первоначальной высотой ячейки и высотой пустой ячейки. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2006, 14:44:50 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=33143274&tid=2184203]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 308ms |

| 0 / 0 |
