Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Подбор ширины и высоты ячейки в сантиметрах, макрос для изменения параметров ячейки исходя из заданных условий
 
Всем доброго дня. Я знаю точные размеры ячеек в сантиметрах и необходимо реализовать макрос, который мог бы пересчитать значения в пикселях в сантиметры и изменить высоту и ширину ячейки. Прилагаю файл. В нем серыми полями закрашены ячейки, в которых выставлены значения в сантиметрах. я не знаю отношения пикселя к сантиметру. Очень прошу помощи. не смог найти ничего подобного на форуме.
 
https://stackoverrun.com/ru/q/10529322
 
Такой ответ Вам подойдет?
https://www.calc.ru/piksel-v-santimetr.html
 
IKor
Это не макрос, а калькулятор.
Если таблиц много, то каждую так не пересчитаешь
 
Цитата
Ivan.kh написал:
https://stackoverrun.com/ru/q/10529322
Я не смогу переработать код этого макроса...
 
Что Вы не сможете, воспользоватся функцией, которая там приведена (ConvertPointToCm)?
Изменено: Ivan.kh - 16 Май 2019 14:52:34
 
Дмитрий, попробуйте интегрировать в свой документ эту информацию:
Код
1 Пиксель равно 0.02636 сантиметров
1 сантиметр равно 37.936267 Пикселей
 
ОК
А дальше как?)
Хотелось что бы оно само считалось, имея значение в сантиметрах в сером поле
 
Цитата
Ivan.kh написал:
Что Вы не сможете, воспользоватся функцией, которая там приведена (ConvertPointToCm)?
Вообще не понял ваш совет...
 
Даже приведенное относится к настройкам стандартным в 96dpi и которые могут быть изменены, что приведет к некорректности расчетов.
 
Dmitrii, значит не удосужились почитать по ссылке.
 
Ivan.kh, не горячитесь.
для примера тс если взять 96dpi (а не 72) то ширина в 4 см 6го столбца должна быть равна  4*96/2,54=151,18 и если это использовать при Page Layout view, то по линейке это 4 см и будет, но если переключится в нормальный режим то 151 превратится 141 . Ширина (width) 105,75 а ширина столбца (ColumnWidth) 19,43 и установить его можно только через  ColumnWidth. а его надо тоже рассчитать, а он не линейный судя по тому что я вижу :-(
на просторах нашел безумный код
Код
    w = Application.CentimetersToPoints(mmWidth / 10)
    While Columns(ColNo + 1).Left - Columns(ColNo).Left - 0.1 > w
        Columns(ColNo).ColumnWidth = Columns(ColNo).ColumnWidth - 0.1
    Wend

очень странно, что нет прямого варианта.
Изменено: БМВ - 16 Май 2019 16:56:33
 
Цитата
БМВ написал:
нашел безумный код
Здравствуйте, Михаил! Может быть, такой код вызван желанием учесть влияние возможных границ ячеек.
Владимир
 
sokol92, Приветствую. Владимир, нет.  думаю именно такой вызван незнанием что есть еще свойство Width :-)
1. Excel measures column width units based on the size (width) of the font you use in the Normal style
в переводе Excel измеряет ширину столбца базируюсь ширине шрифта нормального стиля.
2. Выяснилось, что Application.CentimetersToPoints работает но этому значению соответвует Columns.Width только в режиме ActiveWindow.View = xlPageLayoutView
3. Реализовал было код с итерационным приближением для быстрого подбора но не сохранил, но принцип такой:

1. меняем ActiveWindow.View = xlPageLayoutView
2. Определеяем Application.CentimetersToPoints для нужной ширины в см
3. далее в цикле While сравниваем ABS(Columns.Width -  Application.CentimetersToPoints( … )) > xxx погрешность
4. Меняем Columns.ColumnWidt н дельту с плюсом или минусом в зависимости от того куда нужно
5. корректируем дельту (уменьшаем)
6. повторяем
7.Возвращаем ActiveWindow.View = xlNormalView

Но как-то сложно.
Изменено: БМВ - 16 Май 2019 21:31:37
 
В общем и целом решения нет....
 
Ну попробуйте, только в силу того что ведется подбор или возможно необходимо загрубить точность или возможны зависания, так как порой при одном и том же шаге изменения изменения происходят и нет, а в последнем случае идет зацикливание. Ну или сделать счетчик итераций и при достижении максимального, останавливать  расчет.
Изменено: БМВ - 21 Май 2019 07:27:44
 
Думал, что всё знаю о методах проверки бухгалтерского баланса, но чтобы с помощью линейки!?
Кстати, не поленился распечатать и проверить - Михаил прошел тест с блеском :)  
Владимир
 
sokol92, Владимир, приветствую. Блеск блеском, но как же мне было лениво это все делать :-). И методика кошмарна, это как перенос слов базируясь на ширине столбца,  но реально варианта более не вижу, разве что рассчитывать соотношения исходя и on the size (width) of the font you use in the Normal style.  Вроде пока искал аналоги натыкался на подобное. А то что выше, ну улучшенная версия найденного.
 
В своей практике использовал этот подход: Программно задать ширину столбца Excel в пикселах (Width, ColumnWidth)
«Бритва Оккама» или «Принцип Калашникова»?
 
Здравствуйте, Виталий! Спасибо Вам (и Игорю) за интересную ссылку. Попробовал этот метод для нескольких известных из практики шрифтов, меняя стиль Normal (обычный). Сценарий проверки взял по Вашей ссылке. Положительные результаты получены для шрифтов Calibri(11) и Arial(10). Если изменить размер этих шрифтов в стиле Normal, то плюс меняется на минус (очевидно, для новых размеров нужны другие константы). То же справедливо и для других шрифтов.
Изменено: sokol92 - 21 Май 2019 19:22:08
Владимир
 
sokol92, Владимир. В самую точку. Подбор коэффициентов может оказаться хуже подгона ширины, хотя и быстрее в разы.
Изменено: БМВ - 22 Май 2019 13:58:33
 
Михаил, практическая польза от метода Игоря несомненна, поскольку в  >99% случаях стиль Normal не меняют (и не знают, как это сделать ). Поэтому, можно проверить стиль Normal:
Код
  With ActiveWorkbook.Styles("Normal").Font
    If .Name = "Calibri" And .Size = 11 Or .Name = "Arial" And .Size = 10 Then
      ' используем формулу
    Else
      ' подбираем
    End If
  End With

Для маленьких значений ширины ячейки в стандартных случаях расчет по формуле, вероятно, можно уточнить.

Но что-то мой коллега - бухгалтер (автор темы) совсем исчез...
Изменено: sokol92 - 21 Май 2019 20:15:21
Владимир
 
Цитата
sokol92 написал:
Но что-то мой коллега - бухгалтер (автор темы) совсем исчез...
Так как только прочел
Цитата
sokol92 написал:
о методах проверки бухгалтерского баланса, но чтобы с помощью линейки!?
Схватил Логарифмическую и ….. :-)

Кто ж говорит о бесполезности, тут скорее вопрос универсальности и эффективности.
вот нашел по быстрому https://www.vbaexpress.com/forum/showthread.php?28488-Solved-Set-column-width-in-pixels, но создавать книгу для определения параметров - это перебор.
 
Цитата
sokol92 написал:
Здравствуйте, Виталий!
Здравствуйте Владимир!
БМВ, приветствую!
Вижу, есть некоторые нюансы.
Я использовал данную формулу от Игоря, для определения размера ячейки в пикселях (задаваемого пользователем) для вставки фото.
Вполне подошло, стиль Normal не менял.
«Бритва Оккама» или «Принцип Калашникова»?
 
Здравствуйте, Михаил!
По поводу ссылки из #23. Метод определения коэффициентов линейной функции очевиден, но начинать надо (и применять линейную функцию), вероятно, не с 1 символа (хотя бы с 4). Прием с новой книгой мы часто используем в макросах, поскольку манипуляции с большими книгами чреваты временными затратами.
Владимир
 
БМВ,Огромное спасибо.
Макрос отлично справляется. Теперь формирование Ворда занимает в разы меньше времени.
Страницы: 1
Читают тему (гостей: 1)
Наверх