Подскажите как прописать в макросе, чтобы в моей таблице МАКСИМАЛЬНО увеличить столбец «В», при этом чтобы таблица не вылезла за границу страницы справа.
Макрорекордером получается установить какую-то КОНКРЕТНУЮ ширину данного столбца, например такой код:
[vba]
Код
Columns("B:B").ColumnWidth = 48,89
[/vba]
А как сделать .AutoFit этому столбцу – не знаю.
Файл прикрепляю, в нем два листа:
1-й – как сейчас есть; 2-й – как должно стать.
Доброго дня, уважаемые знатоки VBA!
Подскажите как прописать в макросе, чтобы в моей таблице МАКСИМАЛЬНО увеличить столбец «В», при этом чтобы таблица не вылезла за границу страницы справа.
Макрорекордером получается установить какую-то КОНКРЕТНУЮ ширину данного столбца, например такой код:
[vba]
Код
Columns("B:B").ColumnWidth = 48,89
[/vba]
А как сделать .AutoFit этому столбцу – не знаю.
Файл прикрепляю, в нем два листа:
1-й – как сейчас есть; 2-й – как должно стать.grh1
Private Sub №8_Подготовка_листа() Dim oX As Long Dim Ap As Application Dim СтолбБ As Range Dim КрайТабы As Range 'Ячейка справа снизу от нижнего правого угла табы _ Ячейка дожна быть видна на экране при запуске макроса '========================= Set Ap = Application Set СтолбБ = Cells(1, "B") Set КрайТабы = Cells(104, "G") '-------------------- Cells(1).Select СтолбБ.ColumnWidth = 3 '========================= oX = 1 Do If oX < 13 _ Then СтолбБ.ColumnWidth = oX / 12 If oX > 12 _ Then СтолбБ.ColumnWidth = (oX - 12) / 7 + 1 '---------- If ActiveWindow.VisibleRange.Address <> _ Union(КрайТабы, ActiveWindow.VisibleRange).Address _ Then Exit Do oX = oX + 1 DoEvents Loop oX = oX - 1 '==================== If oX < 13 Then _ СтолбБ.ColumnWidth = oX / 12 If oX > 12 Then _ СтолбБ.ColumnWidth = (oX - 12) / 7 + 1 Cells(1).Select '========================= End Sub
[/vba]
grh1, попробуте это [vba]
Код
Private Sub №8_Подготовка_листа() Dim oX As Long Dim Ap As Application Dim СтолбБ As Range Dim КрайТабы As Range 'Ячейка справа снизу от нижнего правого угла табы _ Ячейка дожна быть видна на экране при запуске макроса '========================= Set Ap = Application Set СтолбБ = Cells(1, "B") Set КрайТабы = Cells(104, "G") '-------------------- Cells(1).Select СтолбБ.ColumnWidth = 3 '========================= oX = 1 Do If oX < 13 _ Then СтолбБ.ColumnWidth = oX / 12 If oX > 12 _ Then СтолбБ.ColumnWidth = (oX - 12) / 7 + 1 '---------- If ActiveWindow.VisibleRange.Address <> _ Union(КрайТабы, ActiveWindow.VisibleRange).Address _ Then Exit Do oX = oX + 1 DoEvents Loop oX = oX - 1 '==================== If oX < 13 Then _ СтолбБ.ColumnWidth = oX / 12 If oX > 12 Then _ СтолбБ.ColumnWidth = (oX - 12) / 7 + 1 Cells(1).Select '========================= End Sub
ZetMenChavo, спасибо, но применить к своему примеру не получается. Если код такой длинный, легче выставить какие-либо заданные ширины изначально и не париться. Мне просто нужно понять, как столбец "В" (2) сделать максимальным а остальные столбцы не трогать.
ZetMenChavo, спасибо, но применить к своему примеру не получается. Если код такой длинный, легче выставить какие-либо заданные ширины изначально и не париться. Мне просто нужно понять, как столбец "В" (2) сделать максимальным а остальные столбцы не трогать.grh1
grh1, нижний правый угол вашей таблицы был виден когда запускали макрос? Без этого не сработает. Сделайте что бы ячейка G104 была видна в окне и попробуте снова включить макрос
grh1, нижний правый угол вашей таблицы был виден когда запускали макрос? Без этого не сработает. Сделайте что бы ячейка G104 была видна в окне и попробуте снова включить макросZetMenChavo
Сообщение отредактировал ZetMenChavo - Четверг, 01.09.2022, 21:10
Мне это не подходит, т.к. таблицы бывают и по 1500 и 2000 строк. Это мне нужно постоянно производить танцы с бубном. Тем более, что макрос по форматированию столбца должен работать в связке с основным макросом.
Мне это не подходит, т.к. таблицы бывают и по 1500 и 2000 строк. Это мне нужно постоянно производить танцы с бубном. Тем более, что макрос по форматированию столбца должен работать в связке с основным макросом.grh1
Vadym Gorokh
Сообщение отредактировал grh1 - Четверг, 01.09.2022, 21:20
grh1, а так? Подправил код что бы вычисления не зивисили от того какие строки видны [vba]
Код
Private Sub №8_Подготовка_листа() Dim oX As Long Dim Ap As Application Dim СтолбБ As Range Dim КрайТабы As Range 'Ячейка справа снизу от нижнего правого угла табы '========================= Set Ap = Application Set СтолбБ = Cells(1, "B") Set КрайТабы = Cells(1, "G").EntireColumn '-------------------- Cells(1).Select СтолбБ.ColumnWidth = 3 '========================= oX = 1 Do If oX < 13 _ Then СтолбБ.ColumnWidth = oX / 12 If oX > 12 _ Then СтолбБ.ColumnWidth = (oX - 12) / 7 + 1 '---------- If ActiveWindow.VisibleRange.EntireColumn.Address <> _ Union(КрайТабы, ActiveWindow.VisibleRange.EntireColumn).Address _ Then Exit Do oX = oX + 1 DoEvents Loop oX = oX - 1 '==================== If oX < 13 Then _ СтолбБ.ColumnWidth = oX / 12 If oX > 12 Then _ СтолбБ.ColumnWidth = (oX - 12) / 7 + 1 Cells(1).Select '========================= End Sub
[/vba]
Если и это не сработает, то я даже не знаю что у вас там с vba. У меня столбец Б в вашей табе подгоняется как надо под размер окна.
grh1, а так? Подправил код что бы вычисления не зивисили от того какие строки видны [vba]
Код
Private Sub №8_Подготовка_листа() Dim oX As Long Dim Ap As Application Dim СтолбБ As Range Dim КрайТабы As Range 'Ячейка справа снизу от нижнего правого угла табы '========================= Set Ap = Application Set СтолбБ = Cells(1, "B") Set КрайТабы = Cells(1, "G").EntireColumn '-------------------- Cells(1).Select СтолбБ.ColumnWidth = 3 '========================= oX = 1 Do If oX < 13 _ Then СтолбБ.ColumnWidth = oX / 12 If oX > 12 _ Then СтолбБ.ColumnWidth = (oX - 12) / 7 + 1 '---------- If ActiveWindow.VisibleRange.EntireColumn.Address <> _ Union(КрайТабы, ActiveWindow.VisibleRange.EntireColumn).Address _ Then Exit Do oX = oX + 1 DoEvents Loop oX = oX - 1 '==================== If oX < 13 Then _ СтолбБ.ColumnWidth = oX / 12 If oX > 12 Then _ СтолбБ.ColumnWidth = (oX - 12) / 7 + 1 Cells(1).Select '========================= End Sub
[/vba]
Если и это не сработает, то я даже не знаю что у вас там с vba. У меня столбец Б в вашей табе подгоняется как надо под размер окна.ZetMenChavo
Можно ещё скорость подгона ускорить заменив единицу в уравнениях oX = oX + 1 и oX = oX - 1 на более высоке число, но в коде выше это, с возростанием числа, будет сказываться на точность подгона.
Можно ещё скорость подгона ускорить заменив единицу в уравнениях oX = oX + 1 и oX = oX - 1 на более высоке число, но в коде выше это, с возростанием числа, будет сказываться на точность подгона.ZetMenChavo
Так и должно быть. Столбец B будет расширять пока столбец G не скроется из видимой части окна. Уменьшите ширину окна и вы быстро увидите как это работает.
А ещё можно поменять oX = oX + 1 и oX = oX - 1 на oX = oX + 5 и oX = oX - 5. Так увеличиться скорость подгонки.
Цитата
начинает медленно расширяться
Так и должно быть. Столбец B будет расширять пока столбец G не скроется из видимой части окна. Уменьшите ширину окна и вы быстро увидите как это работает.
А ещё можно поменять oX = oX + 1 и oX = oX - 1 на oX = oX + 5 и oX = oX - 5. Так увеличиться скорость подгонки.ZetMenChavo
Сообщение отредактировал ZetMenChavo - Четверг, 01.09.2022, 21:40
У меня столбец Б в вашей табе подгоняется как надо под размер окна.
Мне не надо подгонять под РАЗМЕР ОКНА, а мне нужно как на листе "как должно быть", т.е. чтобы моя таблица не вылезла ЗА ГРАНИЦЫ СТРАНИЦЫ, при этом столбец "В" растянуть по максимуму. Вы просто неправильно поняли меня.
ZetMenChavo, макрос не подгоняет по ГРАНИЦЕ страницы.
У меня столбец Б в вашей табе подгоняется как надо под размер окна.
Мне не надо подгонять под РАЗМЕР ОКНА, а мне нужно как на листе "как должно быть", т.е. чтобы моя таблица не вылезла ЗА ГРАНИЦЫ СТРАНИЦЫ, при этом столбец "В" растянуть по максимуму. Вы просто неправильно поняли меня.grh1
Vadym Gorokh
Сообщение отредактировал grh1 - Четверг, 01.09.2022, 21:43
grh1, Вроде теперь то. Столбец Б будет расширяться до тез пор, пока пунктирная синяя не залезет между столбцами таблицы E и F, после чего сделает шаг назад, и вся таба будет ровно до пунктирной синий.
Надеюсь теперь то, а то неловко вышло по началу: вы хотели одно, а я думал о другом, сонный совсем
Но если всёж до сплошной, 5 мин и будет вариант для сплошной)
grh1, Вроде теперь то. Столбец Б будет расширяться до тез пор, пока пунктирная синяя не залезет между столбцами таблицы E и F, после чего сделает шаг назад, и вся таба будет ровно до пунктирной синий.
Надеюсь теперь то, а то неловко вышло по началу: вы хотели одно, а я думал о другом, сонный совсем
Но если всёж до сплошной, 5 мин и будет вариант для сплошной)ZetMenChavo
ZetMenChavo, к сожалению Ваш макрос подтягивает ГРАНИЦУ, а мне нужно наоборот - расширить столбец ДО границы. Я не знаю что вот это такое [vba]
Код
VPageBreaks(1)
[/vba] могу только догадываться, чтобы макрос сработал, границы страницы и ЛИСТА должные стоять в определенном порядке, и если этот порядок будет нарушен, то макрос не сработает. Попробуйте сами передвинуть СПЛОШНУЮ линию (это граница листа) на один столбец вправо или влево и запустите макрос - он выдаст ошибку. А как воздействовать на эту VPageBreaks(1) - я не знаю.
ZetMenChavo, к сожалению Ваш макрос подтягивает ГРАНИЦУ, а мне нужно наоборот - расширить столбец ДО границы. Я не знаю что вот это такое [vba]
Код
VPageBreaks(1)
[/vba] могу только догадываться, чтобы макрос сработал, границы страницы и ЛИСТА должные стоять в определенном порядке, и если этот порядок будет нарушен, то макрос не сработает. Попробуйте сами передвинуть СПЛОШНУЮ линию (это граница листа) на один столбец вправо или влево и запустите макрос - он выдаст ошибку. А как воздействовать на эту VPageBreaks(1) - я не знаю.grh1
Vadym Gorokh
Сообщение отредактировал grh1 - Четверг, 01.09.2022, 22:33
и этот порядок всегда у меня разный... значит мне его нужно или устанавливать вручную, что совершенно не приемлемо или прописать дополнительным кодом перед Вашим кодом.
и этот порядок всегда у меня разный... значит мне его нужно или устанавливать вручную, что совершенно не приемлемо или прописать дополнительным кодом перед Вашим кодом.grh1