ZetMenChavo, нет Вы не поняли. ПУНКТИРНАЯ линия (граница страницы) как была пунктирной, так и остается ПУНКТИРНОЙ - нельзя ее совмещать со сплошной. А растягиваться должен столбец "В" , ширина же столбцов C,D,E,F должна не изменяться где КРАЙ таблицы это столбец F и растягивая столбец "В" столбец F должен упереться в синюю пунктирную и остановиться. Вот и все.
ZetMenChavo, нет Вы не поняли. ПУНКТИРНАЯ линия (граница страницы) как была пунктирной, так и остается ПУНКТИРНОЙ - нельзя ее совмещать со сплошной. А растягиваться должен столбец "В" , ширина же столбцов C,D,E,F должна не изменяться где КРАЙ таблицы это столбец F и растягивая столбец "В" столбец F должен упереться в синюю пунктирную и остановиться. Вот и все.grh1
grh1, Если я всё же опять не правильно понял что вам нужно, выставьте вручную какой результат вам нужем и скиньте файл, а я уже доделаю код чтоб добивался того же самого.
grh1, Если я всё же опять не правильно понял что вам нужно, выставьте вручную какой результат вам нужем и скиньте файл, а я уже доделаю код чтоб добивался того же самого.ZetMenChavo
Как только столбец F залазит за пунктир, Столбец B немного уменьшается и все столбцы до F находятся до пунктира. Разве у вас не так же получается?
Как только столбец F залазит за пунктир, Столбец B немного уменьшается и все столбцы до F находятся до пунктира. Разве у вас не так же получается? ZetMenChavo
Сообщение отредактировал ZetMenChavo - Четверг, 01.09.2022, 22:52
Потому что если Вы запустите свой макрос для 1-го листа, он у Вас не сработает. На сегодня всё. Спокойной ночи. Утро вечера мудренее - завтра разберемся.
Потому что если Вы запустите свой макрос для 1-го листа, он у Вас не сработает. На сегодня всё. Спокойной ночи. Утро вечера мудренее - завтра разберемся.grh1
Странно, у меня на первом листе так же работает макрос и без включения страничного режима.
Добавил включение Страничного режима. Вот как в прикрепленном файле получается 1я страница Можно ещё доп. сплошную синию отодвинуть чтоб как на 2м листе (правда не понимаю в чём смысл этого действия если и так таба вписывается), ну раз мудренее утром, то утром. Приятных снов)
И в режиме печати
Цитата
он у Вас не сработает
Странно, у меня на первом листе так же работает макрос и без включения страничного режима.
Добавил включение Страничного режима. Вот как в прикрепленном файле получается 1я страница Можно ещё доп. сплошную синию отодвинуть чтоб как на 2м листе (правда не понимаю в чём смысл этого действия если и так таба вписывается), ну раз мудренее утром, то утром. Приятных снов)
ZetMenChavo,приветствую! Последний Ваш файл 555 отрабатывает отлично на любой таблице, не привязываясь к расположению сплошной линии. Вопрос - а куда делся тот первоначальный Ваш КОРОТКИЙ код? И можно ли этот, отлично работающий код, как-то минимизировать? Или это трудновыполнимо?
За отлично работающий код спасибо большое.
ZetMenChavo,приветствую! Последний Ваш файл 555 отрабатывает отлично на любой таблице, не привязываясь к расположению сплошной линии. Вопрос - а куда делся тот первоначальный Ваш КОРОТКИЙ код? И можно ли этот, отлично работающий код, как-то минимизировать? Или это трудновыполнимо?
ZetMenChavo, еще такой вопрос - Ваш макрос при срабатывании почему-то все СТРОКИ делает одинакового размера, а нужно чтобы перенос по словам работал, так как в столбце "В" очень часто длинные названия, состоящие из 2-х а то и из 3-х строк и этих строк кроме первой не видно и очень неудобно. Что можно придумать?
Посмотрел - во всех строках столбца "В" включен режим переноса по словам, но почему-то не срабатывает.
На скрине то, что я имею ввиду. В файле 556 набрана одна строка - пусть отработает макрос и Вы сами увидите.
P.S. Ну вроде решил вопрос добавлением в Ваш код двух строк: [vba]
ZetMenChavo, еще такой вопрос - Ваш макрос при срабатывании почему-то все СТРОКИ делает одинакового размера, а нужно чтобы перенос по словам работал, так как в столбце "В" очень часто длинные названия, состоящие из 2-х а то и из 3-х строк и этих строк кроме первой не видно и очень неудобно. Что можно придумать?
Посмотрел - во всех строках столбца "В" включен режим переноса по словам, но почему-то не срабатывает.
На скрине то, что я имею ввиду. В файле 556 набрана одна строка - пусть отработает макрос и Вы сами увидите.
P.S. Ну вроде решил вопрос добавлением в Ваш код двух строк: [vba]
RAN, здравствуйте. oX это количество пикселей, величину которых можно видеть когда в ручную меняете размер ячеек
Когда то давно возникла необходимость задавать размер ячеек макросом с точностью до пикселя. Если с высотой всё было просто достаточно было oY*0.75 и в результате высота строк в пикселях была равна oY, то с ширеной майкросовцы жестко подставили, т.к. ширина задаваемая ColumnWidth завязана не на пунктах а на символах
Цитата
Обратите внимание, что высота строки задается в пунктах, а ширина столбца в символах, поэтому их числовые значения не соответствуют друг другу по фактическому размеру.
Но желание уметь задавать ширину столбцов, указывая количество нужных пикселей, не пропало, и методом пошагового изменения ширины столбцов и сравнения их размеров, я смог вычеслить правельную формулу зависимости ширины от пиксей. В результате и получилось это [vba]
Код
If oX < 13 Then _ rn.ColumnWidth = oX / 12 If oX > 12 Then _ rn.ColumnWidth = (oX - 12) / 7 + 1
[/vba] Если oX количство пикселей от 0 до 12, то нужно делить на 12, а больше 12, вычеслять ширину по формуле (oX - 12) / 7 + 1.
Потом даже отдельный макрос для изменения размера ячеек запилил, где через inputbox указываются размеры в пикселях, и всё точно выставляется. Можете и сами убедиться) [vba]
Код
Sub Размер_Ячеек() Dim k As String Dim oX&, oY As Long Dim rn As Range '========================= k = Application.InputBox( _ prompt:="ОК - весь лист" & Chr(10) & _ "Отмена - выделенное") If k = "" _ Then Set rn = Cells _ Else Set rn = Selection '==================== k = Application.InputBox( _ prompt:="Ширина в пикселях" & Chr(10) & _ "Отмена - не изменять") If k <> "False" Then If k = "" Then k = 0 oX = k '--------------- If oX < 13 Then _ rn.ColumnWidth = oX / 12 If oX > 12 Then _ rn.ColumnWidth = (oX - 12) / 7 + 1 End If '==================== k = Application.InputBox( _ prompt:="Высота в пикселях" & Chr(10) & _ "Отмена - не изменять") If k <> "False" Then If k = "" Then k = 0 oY = k '--------------- rn.RowHeight = oY * 0.75 End If End Sub
[/vba]
Цитата
Исходя из чего и зачем такая хитрая арифметика?
Чтобы заново не изобретать колесо, просто скопировал код из своих старых проектов, и постепенно переделывал его под задачу в этой теме.
RAN, здравствуйте. oX это количество пикселей, величину которых можно видеть когда в ручную меняете размер ячеек
Когда то давно возникла необходимость задавать размер ячеек макросом с точностью до пикселя. Если с высотой всё было просто достаточно было oY*0.75 и в результате высота строк в пикселях была равна oY, то с ширеной майкросовцы жестко подставили, т.к. ширина задаваемая ColumnWidth завязана не на пунктах а на символах
Цитата
Обратите внимание, что высота строки задается в пунктах, а ширина столбца в символах, поэтому их числовые значения не соответствуют друг другу по фактическому размеру.
Но желание уметь задавать ширину столбцов, указывая количество нужных пикселей, не пропало, и методом пошагового изменения ширины столбцов и сравнения их размеров, я смог вычеслить правельную формулу зависимости ширины от пиксей. В результате и получилось это [vba]
Код
If oX < 13 Then _ rn.ColumnWidth = oX / 12 If oX > 12 Then _ rn.ColumnWidth = (oX - 12) / 7 + 1
[/vba] Если oX количство пикселей от 0 до 12, то нужно делить на 12, а больше 12, вычеслять ширину по формуле (oX - 12) / 7 + 1.
Потом даже отдельный макрос для изменения размера ячеек запилил, где через inputbox указываются размеры в пикселях, и всё точно выставляется. Можете и сами убедиться) [vba]
Код
Sub Размер_Ячеек() Dim k As String Dim oX&, oY As Long Dim rn As Range '========================= k = Application.InputBox( _ prompt:="ОК - весь лист" & Chr(10) & _ "Отмена - выделенное") If k = "" _ Then Set rn = Cells _ Else Set rn = Selection '==================== k = Application.InputBox( _ prompt:="Ширина в пикселях" & Chr(10) & _ "Отмена - не изменять") If k <> "False" Then If k = "" Then k = 0 oX = k '--------------- If oX < 13 Then _ rn.ColumnWidth = oX / 12 If oX > 12 Then _ rn.ColumnWidth = (oX - 12) / 7 + 1 End If '==================== k = Application.InputBox( _ prompt:="Высота в пикселях" & Chr(10) & _ "Отмена - не изменять") If k <> "False" Then If k = "" Then k = 0 oY = k '--------------- rn.RowHeight = oY * 0.75 End If End Sub
[/vba]
Цитата
Исходя из чего и зачем такая хитрая арифметика?
Чтобы заново не изобретать колесо, просто скопировал код из своих старых проектов, и постепенно переделывал его под задачу в этой теме.ZetMenChavo
Сообщение отредактировал ZetMenChavo - Пятница, 02.09.2022, 15:00
grh1, рад что основная задача решена) Косательно последнего вашего вопроса с переносом по словам, постараюсь вечером ответить, если кто раньше меня не успеет.
grh1, рад что основная задача решена) Косательно последнего вашего вопроса с переносом по словам, постараюсь вечером ответить, если кто раньше меня не успеет.ZetMenChavo
кстати не хочется создавать новую тему, но есть маленький вопрос, как прописать макросом замену слова "диаметр" на символ Ø? сам символ НЕ ОТОБРАЖАЕТСЯ в коде правильно - то ноль, то какая-нибудь абракадабра. Нашел его наименование "ChrW(216)", но как правильно прописать в коде не знаю.
Будем считать что в нашем (по теме) растягиваемом столбце "В" есть такое слово и символ, который неправильно отображается - вс как бы по теме, чтобы не наказали админы. Но нельзя этот маленький вопросик здесь задавать, то я его не задавал.
кстати не хочется создавать новую тему, но есть маленький вопрос, как прописать макросом замену слова "диаметр" на символ Ø? сам символ НЕ ОТОБРАЖАЕТСЯ в коде правильно - то ноль, то какая-нибудь абракадабра. Нашел его наименование "ChrW(216)", но как правильно прописать в коде не знаю.
Будем считать что в нашем (по теме) растягиваемом столбце "В" есть такое слово и символ, который неправильно отображается - вс как бы по теме, чтобы не наказали админы. Но нельзя этот маленький вопросик здесь задавать, то я его не задавал.