#excel #vba #printing
Вопрос:
Я использую этот код
Sub print_area()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
With ws.PageSetup
.PrintTitleColumns = "$A:$E"
.PrintArea = ws.Range("A128").Value
.CenterHorizontally = True
End With
Next
End Sub
Range("A128").Value
имеет значение: $F$1:$AF$125,$AG$1:$BE$125,$BF$1:$CD$125,$CE$1:$DA$125,$DB$1:$DX$125
области печати заданы неправильно (области близки к заданному диапазону, но не так, как хотелось бы), какие еще параметры мне нужно установить, чтобы это работало правильно?
Красная стрелка указывает, где должна находиться область печати
Комментарии:
1. Возможно , вам захочется перейти
Range("A128").Value
наws.Range("A128").Value
, так как вы просматриваете рабочие листы.2. Внес это изменение, все еще не работает :/. Спасибо
Ответ №1:
Как правило, Excel автоматически устанавливает разрывы страниц для печати в зависимости от размера бумаги, масштаба, заданного количества листов по ширине и высоте, ориентации страницы и других параметров. Вы можете использовать объекты VPageBreak и HPageBreak в сочетании с рядом .PageSetup
свойств для ручной подгонки разрывов страниц. Обратите внимание, что вы не можете установить разрывы страниц с .PrintArea
помощью свойства (см. Ниже в коде, почему). В следующем коде я устанавливаю разрывы страниц после ячеек «AF1», «BE1», «CD1», «DA1», «DX1»:
Sub print_area()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
With ws.PageSetup
.PrintTitleColumns = "$A:$E"
.PrintArea = "$F$1:$AF$125,$AG$1:$BE$125,$BF$1:$CD$125,$CE$1:$DA$125,$DB$1:$DX$125" ' there will be one area between the upper left and lower right cells
Debug.Print .PrintArea ' check the final .PrintArea; prints $F$1:$DX$125
.Zoom = False
.Orientation = xlLandscape
.FitToPagesWide = False 'it's Auto
.FitToPagesTall = 1
.CenterHorizontally = True
ws.ResetAllPageBreaks
breaks = Array("AF1", "BE1", "CD1", "DA1", "DX1") 'zero-based array
For i = 1 To UBound(breaks)
ws.VPageBreaks.Add Before:=ws.Range(breaks(i - 1)).Offset(, 1)
Next
End With
Next
End Sub
Пожалуйста, обратите внимание, что в ответ на ваши действия по разбиению на страницы Excel может
(и обычно делает это) изменить саму разбивку на страницы
Комментарии:
1. Спасибо. Я попробовал ваш код, он не сработал. Знаете ли вы другой способ решения этой проблемы?
2. После долгого времени я, наконец, понял ваш код. Спасибо