Доброго времени суток! Столкнулся со следующей задачей: Необходим (для удобства) макрос печати. Но не простой, а с выделением области печати, принудительной горизонтальной ориентации и печати выделенного диапазона на 1 лист.
Простой макрос печати диапазона есть: [vba]
Код
Sub Name() With ThisWorkbook .DisplayDrawingObjects = xlHide .Worksheets(1).Range("A1:O23").PrintOut .DisplayDrawingObjects = xlAll 'xlPlaceholders End With End Sub
[/vba] Что нужно добавить для горизонтальной ориентации и печати выделенного диапазона на 1 лист?
Заранее большое человеческое спасибо! )))
P.S. с ориентацией справился (вроде). Добавил следующую строку ниже .DisplayDrawingObjects = xlHide: [vba]
Код
.ActiveSheet.PageSetup.Orientation = xlLandscape
[/vba]
Доброго времени суток! Столкнулся со следующей задачей: Необходим (для удобства) макрос печати. Но не простой, а с выделением области печати, принудительной горизонтальной ориентации и печати выделенного диапазона на 1 лист.
Простой макрос печати диапазона есть: [vba]
Код
Sub Name() With ThisWorkbook .DisplayDrawingObjects = xlHide .Worksheets(1).Range("A1:O23").PrintOut .DisplayDrawingObjects = xlAll 'xlPlaceholders End With End Sub
[/vba] Что нужно добавить для горизонтальной ориентации и печати выделенного диапазона на 1 лист?
Заранее большое человеческое спасибо! )))
P.S. с ориентацией справился (вроде). Добавил следующую строку ниже .DisplayDrawingObjects = xlHide: [vba]
Sub name() With ThisWorkbook DisplayDrawingObjects = xlHide ActiveSheet.PageSetup.Orientation = xlLandscape Worksheets(6).Range("A1:O23").PrintOut ActiveSheet.PageSetup.FitToPagesWide = 1 ActiveSheet.PageSetup.FitToPagesTall = 1 DisplayDrawingObjects = xlAll 'xlPlaceholders End With End Sub
[/vba]
Данный макрос на определенном листе выделяет необходимый диапазон и выводит его на печать в альбомной ориентации на одном листе.
А с точки зрения правильности и т.д. и т.п. он правильно прописан, или кой чего мне на руки нужно сделать?
Pelena, СПАСИБО огромное! Вроде все работает.
Итого получилось так:
[vba]
Код
Sub name() With ThisWorkbook DisplayDrawingObjects = xlHide ActiveSheet.PageSetup.Orientation = xlLandscape Worksheets(6).Range("A1:O23").PrintOut ActiveSheet.PageSetup.FitToPagesWide = 1 ActiveSheet.PageSetup.FitToPagesTall = 1 DisplayDrawingObjects = xlAll 'xlPlaceholders End With End Sub
[/vba]
Данный макрос на определенном листе выделяет необходимый диапазон и выводит его на печать в альбомной ориентации на одном листе.
А с точки зрения правильности и т.д. и т.п. он правильно прописан, или кой чего мне на руки нужно сделать?BlackRaven
Вы печатаете, а потом устанавливаете размеры Примерно так надо поправить [vba]
Код
Sub name() ThisWorkbook.DisplayDrawingObjects = xlHide With ActiveSheet.PageSetup .FitToPagesWide = 1 .FitToPagesTall = 1 .Orientation = xlLandscape End With Range("A1:O23").PrintOut ThisWorkbook.DisplayDrawingObjects = xlAll 'xlPlaceholders End Sub
Вы печатаете, а потом устанавливаете размеры Примерно так надо поправить [vba]
Код
Sub name() ThisWorkbook.DisplayDrawingObjects = xlHide With ActiveSheet.PageSetup .FitToPagesWide = 1 .FitToPagesTall = 1 .Orientation = xlLandscape End With Range("A1:O23").PrintOut ThisWorkbook.DisplayDrawingObjects = xlAll 'xlPlaceholders End Sub
1. В одной строке у Вас работа с шестым листом, а в строках ниже и выше - с активным. Если активен шестой лист, то все нормально. А если нет? 2. Если написано [vba]
Код
With ThisWorkbook
[/vba], то это значит, что мы работаем с той книгой, где находится макрос. With что-то подразумевает, что внутри блока With - End With мы будем обращаться к этому что-то, но писать его не будем. Запись примерно такая [vba]
Код
With ThisWorkbook .DisplayDrawingObjects = xlHide End With
точка перед DisplayDrawingObjects означает, что перед ним как бы написано то, про что мы написали With. Если без With, то вот так [vba]
Sub nameu8() DisplayDrawingObjects = xlHide With ActiveSheet .PageSetup.Orientation = xlLandscape .Range("A1:O23").PrintOut .PageSetup.FitToPagesWide = 1 .PageSetup.FitToPagesTall = 1 End With DisplayDrawingObjects = xlAll End Sub
[/vba] 3. Крайне нежелательно называть что-либо (макросы, функции, объекты, переменные, ...) именами, зарезервированными в Excel или в VBA. У Вас макрос называется "name". Не нужно так делать. Назовите как-нибудь иначе. Хотя бы "name_"
1. В одной строке у Вас работа с шестым листом, а в строках ниже и выше - с активным. Если активен шестой лист, то все нормально. А если нет? 2. Если написано [vba]
Код
With ThisWorkbook
[/vba], то это значит, что мы работаем с той книгой, где находится макрос. With что-то подразумевает, что внутри блока With - End With мы будем обращаться к этому что-то, но писать его не будем. Запись примерно такая [vba]
Код
With ThisWorkbook .DisplayDrawingObjects = xlHide End With
точка перед DisplayDrawingObjects означает, что перед ним как бы написано то, про что мы написали With. Если без With, то вот так [vba]
Sub nameu8() DisplayDrawingObjects = xlHide With ActiveSheet .PageSetup.Orientation = xlLandscape .Range("A1:O23").PrintOut .PageSetup.FitToPagesWide = 1 .PageSetup.FitToPagesTall = 1 End With DisplayDrawingObjects = xlAll End Sub
[/vba] 3. Крайне нежелательно называть что-либо (макросы, функции, объекты, переменные, ...) именами, зарезервированными в Excel или в VBA. У Вас макрос называется "name". Не нужно так делать. Назовите как-нибудь иначе. Хотя бы "name_"_Boroda_
_Boroda_, про имя - я знаю, спасибо (просто тут обозначил как Name. При запуске Вашего макроса - да, печатает выделенный фрагмент, но на 4-х листах. А у меня задача впихнуть невпихуемое (эти 4 листа на 1). Иными словами действия: "Выделить диапазон-настройка печати-альбомная ориентация-напечатать выделенный фрагмент-вписать лист на 1 страницу" должны проводиться в автоматическом режиме...
_Boroda_, про имя - я знаю, спасибо (просто тут обозначил как Name. При запуске Вашего макроса - да, печатает выделенный фрагмент, но на 4-х листах. А у меня задача впихнуть невпихуемое (эти 4 листа на 1). Иными словами действия: "Выделить диапазон-настройка печати-альбомная ориентация-напечатать выделенный фрагмент-вписать лист на 1 страницу" должны проводиться в автоматическом режиме...BlackRaven
_Boroda_, дак проверить не вопрос (сам сразу проверяю), вот только я еще пытаюсь понять суть написания макросов и учусь на пробах и ошибках. Что с чем поменять местами подскажете?
_Boroda_, дак проверить не вопрос (сам сразу проверяю), вот только я еще пытаюсь понять суть написания макросов и учусь на пробах и ошибках. Что с чем поменять местами подскажете?BlackRaven
sboy, _Boroda_, Спасибо вам огромное. У меня действительно не вкидывало в 1 страницу. После добавления "ZOOM" все стало как нужно!
Итого вот какую версию я оставил: [vba]
Код
Sub УПВПНР() ThisWorkbook.DisplayDrawingObjects = xlHide With ActiveSheet.PageSetup .Orientation = xlLandscape .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With Range("A1:O23").PrintOut ThisWorkbook.DisplayDrawingObjects = xlAll 'xlPlaceholders End Sub
[/vba]
Нужно вплотную заняться изучением макросов, чтоб другим мозг не выносить)))) ЕЩЕ РАЗ СПАСИБО!!!
sboy, _Boroda_, Спасибо вам огромное. У меня действительно не вкидывало в 1 страницу. После добавления "ZOOM" все стало как нужно!
Итого вот какую версию я оставил: [vba]
Код
Sub УПВПНР() ThisWorkbook.DisplayDrawingObjects = xlHide With ActiveSheet.PageSetup .Orientation = xlLandscape .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With Range("A1:O23").PrintOut ThisWorkbook.DisplayDrawingObjects = xlAll 'xlPlaceholders End Sub
[/vba]
Нужно вплотную заняться изучением макросов, чтоб другим мозг не выносить)))) ЕЩЕ РАЗ СПАСИБО!!!BlackRaven