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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2011, 13:02   #1
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию Правильный автоподбор высоты строки

Здравствуйте, уважаемые программисты. Стандартный автоподбор высоты строки Excel 2003 делает ошибку (во вложениии, выдаёт высоту 45, хотя надо 30). Можно ли решить этот вопрос с помощью макроса.
Вложения
Тип файла: rar Автоподбор.rar (10.7 Кб, 35 просмотров)
Тип файла: zip Автоподбор моё вложение к вопросу.zip (1.5 Кб, 18 просмотров)

Последний раз редактировалось agregator; 08.09.2011 в 14:48.
agregator вне форума Ответить с цитированием
Старый 08.09.2011, 14:26   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Почитайте http://www.planetaexcel.ru/forum.php?thread_id=19253
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 08.09.2011, 15:00   #3
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию

Спасибо за ответы. Уточню вопрос. В ячейке простой текст, ячейка необъединённая.
В варианте с объединёнными ячейками, в итоге, всё равно используется стандартный автоподбор высоты и даёт высоту 45 вместо 30.
Может есть другой способ вычеслить высоту строки.
Вложения
Тип файла: zip Автоподбор+мой пример.zip (11.4 Кб, 18 просмотров)
agregator вне форума Ответить с цитированием
Старый 08.09.2011, 15:05   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

может вот так?
Код:
Sub SetStrHeight()
  Dim w As Single, c As Long: w = 0
  With Sheets(Sheets.Count).Cells(1)
    If ActiveCell.MergeCells Then
      For c = ActiveCell.MergeArea.Cells(1).Column To _
        ActiveCell.MergeArea.Cells(ActiveCell.MergeArea.Cells.Count).Column
        w = w + ActiveCell.MergeArea.Cells(c).EntireColumn.ColumnWidth: Next
      .Value = ActiveCell.Value
      .EntireColumn.ColumnWidth = w
      .WrapText = True
      ActiveCell.EntireRow.RowHeight = .Height
      .ClearContents
    End If
  End With
End Sub
алгоритм простой:
1. взял данные из активной ячейки, положил в ячейку (1) последнего листа
2. собрал общую ширину обеьединенной ячейки
3. назначил эту ширину ячейке (1)
4. задал для (1) формат "переносить по словам" (эксель задаст ей нужную высоту)
5. назначил активной ячейке высоту как у (1)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.09.2011, 15:27   #5
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию

IgorGO, Ваш алгоритм тоже выдаёт высоту строки 45.
Условие: ширина столбца-94, шрифт-Arial, размер-12, текст-"Перевести с 10.09.2011 по 24.09.2011, с личного согласия, в бригаду №3 по графику работы №15 водителя а/м, Управления эксплуатации №2 Кукунова С.В.(таб. № Т3203);"
agregator вне форума Ответить с цитированием
Старый 08.09.2011, 15:37   #6
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию

Интересно, как это делается в Worde.
agregator вне форума Ответить с цитированием
Старый 08.09.2011, 17:22   #7
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию

IgorGO, напишите по такому алгоритму:
1. Установить высоту 1 строки, т.е. 15
2. Выполнить автоподбор ширины столбца
3. Измерить полученную ширину,
поделить её на 1,035, (получено опытным путем)
поделить на первоначальную ширину 94,
округлить в большую сторону до целого числа,
умножить на высоту 1 строки 15,
получаем 30
4. Ставим ширину столбца 94, и высоту строки 30

Последний раз редактировалось agregator; 08.09.2011 в 19:01.
agregator вне форума Ответить с цитированием
Старый 08.09.2011, 17:48   #8
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Вот интересно, если удалить ; в конце предложения, то Ексель сам делает автофит строки. Почему?
nilem вне форума Ответить с цитированием
Старый 08.09.2011, 17:55   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
В ячейке простой текст, ячейка необъединённая.
в необьединенной ячейка эксель сам подбирает высоту. достаточно выставить "переносить по словам". и не надо париться ни с какими макросами.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.09.2011, 18:46   #10
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию

Дело в том, что Excel иногда неправильна подбирает высоту как в "Автоподбор моё вложение к вопросу", т.е. одна лишняя пустая строчка в ячейке. И приходится руками выравнивать строку. Так же для объединенных ячеек.
Я пишу распоряжения, пункты создаю через форму, надо чтобы выглядело как в Worde. (Ячейки объединённые , но суть дела не меняется, надо получить правильную высоту)
agregator вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоподбор высоты объединеных ячеек tae1980 Microsoft Office Excel 14 21.03.2011 12:34
Автоподбор высоты объединенной ячейки edikamn Microsoft Office Excel 1 28.12.2010 11:14
Автоподбор высоты tae1980 Microsoft Office Excel 7 16.11.2010 18:01
Автоподбор высоты Fezdipekla Microsoft Office Access 1 31.03.2010 17:25
Автоматическое изменение высоты строки Solex Microsoft Office Excel 3 11.02.2010 18:37