Страница 1 из 1

AutoFit в Excel

Добавлено: 20 сен 2005, 10:33
jornand
Может кто сталкивался...

Как сделать xlAutoFit на ячейку, растянутую на на несколько колонок (Merged)? Помогло бы xlGetColumnWidth, но такой функции нет.
Или хотя бы xlSetActiveCell, чтоб не создавать кучу bas-модулей.

Добавлено: 26 сен 2005, 18:52
Tangar
Нужна функция для использования в випе, или же родная Excel'евская?!
Если из Випа :
xlAutoFit
Function xlAutoFit(RawU : longint; ColL : longint; RawD : longint; ColR : longint) : boolean;
Для ячеек из заданного диапазона (стандартное форматирование Auto Fit)
Возвращает результат операции.
RawU : longint; ColL : longint; RawD : longint; ColR : longint
координаты диапазона

Добавлено: 27 сен 2005, 11:21
Maverick
Tangar писал(а):Нужна функция для использования в випе, или же родная Excel'евская?!
Если из Випа :
xlAutoFit
Function xlAutoFit(RawU : longint; ColL : longint; RawD : longint; ColR : longint) : boolean;
Для ячеек из заданного диапазона (стандартное форматирование Auto Fit)
Возвращает результат операции.
RawU : longint; ColL : longint; RawD : longint; ColR : longint
координаты диапазона
Может быть уважаемый Тангар поделится свежей докой по Экселевским ф-ям? А мы обязуемся обновить ее в ОПЫТе

Добавлено: 27 сен 2005, 13:09
Tangar
Я бы с радостью поделился, но у меня такая же, ка приведена в разделе "ОПЫТ".
Холявят разработчики библиотеки, не обноваляют доку 8-)

Добавлено: 27 сен 2005, 13:41
jornand
А кто-нибудь пробовал сделать xlAutoFit(1,1,1,3), когда диапазон A1:C1 объединен в одну ячейку? Какие соображения?

Добавлено: 27 сен 2005, 17:55
Tangar
А по-моему это не сработает на объединенных ячейках ...
:-(
Легко проверить, написал маленький макрос на родном для Excel'я VB.
На объединенных ячейках точно не работает автораздвиэка ячейки по ширине и еще каки-то фишки ...
Вобщем много с ними проблем у самого Excel'я

Re: AutoFit в Excel

Добавлено: 03 дек 2018, 09:15
Алексей
xlAutoFit раздвигает ячейку по ширие, а есть какая-нибудь функция, которая раздвигала бы ячейку по высоте, не меняя ширины?

Re: AutoFit в Excel

Добавлено: 03 дек 2018, 15:54
Masygreen
Алексей писал(а):xlAutoFit раздвигает ячейку по ширие, а есть какая-нибудь функция, которая раздвигала бы ячейку по высоте, не меняя ширины?
считайте символы, делите на сколько там влазит в строчку по ширине и примерно выставляйте ширину функцией )

Re: AutoFit в Excel

Добавлено: 04 дек 2018, 07:01
Алексей
Я через матрицу в эксель пишу... ) есть способ нормальный? :)

Re: AutoFit в Excel

Добавлено: 05 дек 2018, 11:42
edward_K
Если у вас высота ячеек авто(не таскали мышкой или не ставили высоту руками) и текст не
объединеных ячейках, то xlWrapText прекрасно работает. Я обычно делаю шаблон, в котором сначала выставляю форматы по столбцам, потом по строкам шапки. После вывода матрицы в файл - xlWrapText, это приводит к автоподбору высоты. Если же есть объединение ячеек, то и автоподбор высоты в Excel не будет работать и приходится выставлять высоту руками. У вас еще есть возможность выполнять/импортировать свои макросы, но если в Excel не найдете инструмента, то вам ничего не поможет.

Re: AutoFit в Excel

Добавлено: 06 дек 2018, 07:09
Алексей
Да, уже загуглил, что при объединении ячеек не получится, а шаблон мне дали как раз такой что в шапке куча таких ячеек.
Будут настаивать, заставлю переделать шаблон и избавиться от объединенных.
Спасибо.

Re: AutoFit в Excel

Добавлено: 06 дек 2018, 12:28
Den
Смотря ,кнч. что на листе там "наверчено".
Но, если просто открыть новую книгу, и вбить там какой то текст разной длины, скажем на первых пяти строках, путь с колонки B
а зачем объединить ячейки с В по F по каждой из этих строчек, и выставить :
- по горизонтали левый отступ
- по вертикали по нижнему краю
- переносить по словам

то запустив макроса :

Код: Выделить всё

Sub Test123()
Dim fromRow, toRow As Long

fromRow = 1
toRow = 5
ActiveSheet.Cells(1, 1).Select
ReDim columnWidths(2 To 6) As Long
colWidth = 0
For colNo = LBound(columnWidths) To UBound(columnWidths):
    columnWidths(colNo) = ActiveSheet.Columns(colNo).ColumnWidth:
    colWidth = colWidth + columnWidths(colNo)
Next
colNo = LBound(columnWidths)
Columns(colNo).ColumnWidth = colWidth
For rowNo = fromRow To toRow
  Set cell = Cells(rowNo, colNo)
  If cell.MergeCells And cell.Address = cell.MergeArea.Cells(1).Address Then
        Set ma = cell.MergeArea
        With ma
            .UnMerge:
           .EntireRow.AutoFit
            .Merge
       End With
    End If
Next
 Columns(LBound(columnWidths)).ColumnWidth = columnWidths(LBound(columnWidths))
End Sub

получаем что нужно