|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.05.2009, 20:31 | #1 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 844
|
Автоподбор высоты объединеных ячеек
Возвращаюсь к ранее обсуждаемой теме.
Не много покопавшись в литературе нашел один макрос, который немного адаптировал под свои нужды. Его работа, хотя и не без замечаний, но вполне устраивает. Данный макрос подбирает размер только для текущей ячейке... Нужно подбирать размер для всех объединенных на листе ячеек, или для все строки (а потом построчно провести обработку всего листа). Что-то не соображу с какой стороны подойти к задаче... :((
С уважением, Алексей.
|
30.05.2009, 21:20 | #2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Методом научного тыка сотворил такой вариант:
Код:
(добавлено) Этот, и ещё один вариант кода, выложил на сайте: http://excelvba.ru/code/AutoFitMergedCells
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 21.03.2011 в 13:08. |
30.05.2009, 22:43 | #3 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 844
|
Просто замечательно! Работает без нареканий. Не скажу за других, а у меня решилась одна из главных проблем в экселе.
Теперь осталось разобраться собственно как оно работает. При горизонтальном объединение все просто замечательно. А вот если еще есть и вертикальное объединение, обработка не происходит, по крайней мере результата не видно. Попробую разобраться.... Вернее не так. Неверное форматирование происходит в случае если в начале строки стоит ячейка с вертикальным объединением, а после нее в той же строке идет ячейка без вертикального объединения. Пример прилагается. ИМХО поймать это можно, но сложно, так как вариации объединения строк могут мыть самые разные. Скорее всего целесообразно оставить как есть. Единственное простое решения, чтобы при автофильтре ни когда не происходило уменьшение высоты ячейки (только увеличение). А перед обработкой приводить все строки к единичной высоте. В процессе работы выяснилось еще одно обстоятельство, связанное с размером ячеек. Имеем 8 колонок объединенных шириной =2 (2*8=16). И текст который занимает в них 3 строчки. Создаем одну колонку шириною 16 и размещаем в ней тот же текст, он уже занимает 6 строчек и сама колонка на взгляд выглядит уже. В ручную раздвигаем колонку так что бы текст уместился в 3 строчках, получаем ширину 21 (разница в 5). Скорее есть некие отступы от края ячейки для текста или для границ, который в случае объединения ячеек пропадают. Они та и должны давать такую разницу. Что приводит к ошибочному определению высоты ячейки. Вопрос: каковы размеры этих отступов? Можно ли принять такую формулу расчета поправочного коэффициента: (21-16)/8=0,625 ?
С уважением, Алексей.
Последний раз редактировалось EducatedFool; 31.05.2009 в 23:47. |
31.05.2009, 23:01 | #4 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 844
|
Экспериментально установлен размер поправки на каждую объединенную ячейку 0,64.
Вот что у меня получилось: Код:
Еще вопрос: у меня ширина всех таблиц [A:AG], а вот длина у всех разная начиная с первой строки. Как правильно указать диапазон для макроса, для обработки все таблицы? Я могу узнать долину таблицы в строках, нужно ли это?
С уважением, Алексей.
Последний раз редактировалось EducatedFool; 01.06.2009 в 00:06. Причина: пользуемся кнопкой ПРАВКА, и поменьше цитируем (а то читать невозможно) |
01.06.2009, 00:03 | #5 | ||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
Особенно, если присутствуют несколько таблиц одна над другой. Попробуйте заменить [a2:z8] на activesheet.usedrange Цитата:
Я очень надеялся, что у тебя в файле нет таких ячеек, поскольку, если в макросе учитывать все возможные варианты группировки ячеек, и рассматривать случаи, когда в одной строке присутствуют объединённые ячейки размером 1*5, 2*5, 3*1, 4*6 и т.д., код получается очень большим (да и отлаживать его очень долго) Цитата:
В некоторых случаях даже не совсем понятен алгоритм подбора высоты и ширины - ибо при большом количестве пристыкованных друг к другу объединённых ячеек различных размеров может получиться так, что подбор высоты одной ячейки влияет на несколько предыдущих ячеек, и т.д. Цитата:
Честно говоря, даже не хочется заморачиваться с этим вопросом - на написание универсального макроса уйдёт очень много времени, а польза от его применения весьма сомнительна. В самом деле, зачем тебе нужен этот макрос? Неужели нельзя один раз выставить нужные размеры для строк и столбцов? Приведи пример файла, в котором надо обязательно делать это программно. Заодно, возможно, найдутся другие варианты решения проблемы. |
||||
02.06.2009, 23:28 | #6 | ||||
Форумчанин
Регистрация: 02.02.2009
Сообщений: 844
|
Цитата:
Цитата:
Цитата:
Цитата:
В общем пример в файле, если появятся предложения, будет интересно услышать.
С уважением, Алексей.
|
||||
02.06.2009, 23:31 | #7 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 844
|
Новая версия:
Код:
С уважением, Алексей.
Последний раз редактировалось tae1980; 02.06.2009 в 23:35. |
16.02.2010, 14:03 | #8 |
Пользователь
Регистрация: 15.01.2010
Сообщений: 31
|
При нажатии на кнопку, сохраняется книга, она тут же открывается и для всей книги используется этот макрос.
1. Как это правильно написать? Код:
2. Если вас не затруднит, посоветуйте самоучитель по VBA Excel. |
16.02.2010, 15:58 | #9 |
Пользователь
Регистрация: 15.01.2010
Сообщений: 31
|
Целый день убил, собрал все возможные ошибки... А даже на тему "как макрос передалать в код" только про Access есть. Как это сделать??? Как правильно сказать параметру "ra" всю книгу, а не активный лист?
|
17.02.2010, 12:21 | #10 |
Пользователь
Регистрация: 15.01.2010
Сообщений: 31
|
Код:
Но суть в том, что ввиду не знания языка VBA я не могу заставить его пробежаться по всем листам, так как ra не дает мне это сделать, пишет про не совместимость типов и т.д.. Раз у меня получилось, но копии не осталось. Сейчас забыл как делал, а если брать каждый лист по очереди то макрос выполняется так долго, что жуть. Подскажите где читать. Либо как это написать. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Автоподбор высоты | tae1980 | Microsoft Office Excel | 7 | 16.11.2010 18:01 |
Блоки div вместо td, как сделать две колонки одинаковой высоты? | v.victoria12345 | HTML и CSS | 0 | 06.05.2009 18:05 |
Выравнивание высоты таблицы для разного разрешения | Svetix | HTML и CSS | 10 | 03.04.2009 17:00 |
Изменение высоты фрецма от контента | cwit | JavaScript, Ajax | 6 | 19.11.2008 07:25 |