В одном документе альбомная и портретная ориентация

Автор Mihhail Mihhail, 26.02.2011, 19:30

« назад - далее »

Mihhail Mihhail

Excel 2010. У меня на одной закладке ряд последовательных таблиц, которые образуют стройный по смыслу документ. Большинство таблиц при распечатке по формату больше подходят под портретную ориентацию для распечатки, но есть и такие которые не влезают по ширине и их лучше распечатывать в альбомной ориентации. Вообщем, знает ли кто как на одной закладке распечатать таблицы одновременно и в альбомной и в портретной ориентации, как это в принципе возможно в Word. Если это нельзя сделать стандартными инструментами, то можно ли сделать с помощью VBA и как?   
NULL

Alex_ST

Уточните, что вы имеете в виду под названием "закладка"?
Это лист Ёкселя что ли? Тогда стандартными средствами вряд ли можно изменить.
С уважением, Алексей

Wasilic

#2
Макросом. Установив на каждый документ свою кнопку, указывая в коде ориентацию перед печатью.

Sub ПечатьДок1()
    ActiveSheet.PageSetup.Orientation = xlLandscape  ' альбом
    Range("A1 : M36").PrintOut Copies:=1
End Sub

Sub ПечатьДок2()
    ActiveSheet.PageSetup.Orientation = xlPortrait  ' книга
    Range("A1 : H56").PrintOut Copies:=1
End Sub
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

Mihhail Mihhail

Да, я имел в виду лист экселя. Жаль, если проблема не решается ...
NULL

Mihhail Mihhail

Цитата: Wasilic от 26.02.2011, 22:55
Макросом. Установив на каждый документ свою кнопку, указывая в коде ориентацию перед печатью.

Sub ПечатьДок1()
    ActiveSheet.PageSetup.Orientation = xlLandscape  ' альбом
    Range("A1 : M36").PrintOut Copies:=1
End Sub

Sub ПечатьДок2()
    ActiveSheet.PageSetup.Orientation = xlPortrait  ' книга
    Range("A1 : H56").PrintOut Copies:=1
End Sub

Спасибо за совет, но он кажется мою проблему не решает. Я так понимаю, что придется несколько раз жать на кнопки, а у меня на одном листе по 20-25 страниц и я пытаюсь найти возможность одним нажатием кнопки распечатать все страницы но в нужной мне ориентации. Я видел в Экселе на закладке "Разметка Страниц" режим "Разрывы". В идеале хотелось бы установить в нужном месте разрывы и выбрать ориентацию для этих разрывов - по типу как это делается в Word.
NULL

ZORRO2005

Цитата: Mihhail Mihhail от 27.02.2011, 02:44
Я видел в Экселе на закладке "Разметка Страниц" режим "Разрывы". В идеале хотелось бы установить в нужном месте разрывы и выбрать ориентацию для этих разрывов - по типу как это делается в Word.
Если речь идет о "Повторить строки заголовков" в Word,
то в Excel помогут сквозные строки в Параметрах страницы закладки "Лист".

Яндекс-деньги: 410011658492153

kuklp

Выход все же есть. Даете последовательные имена диапазонам(Prnt1, Prnt2...) и:
Sub MyPrn()
   Dim r As Range, nm, j&, i&
   Application.ScreenUpdating = False
   For Each nm In ActiveWorkbook.Names
       Set r = Range(nm)
       Application.Goto Reference:=nm.Name
       With r
           For i = 1 To .Columns.Count
               j = j + .Columns(i).Width
           Next
       End With
       If j > 432 Then    'здесь подберете нужное Вам число
           ActiveSheet.PageSetup.Orientation = xlLandscape
           Range(nm).PrintOut Copies:=1, Collate:=True
       Else
           ActiveSheet.PageSetup.Orientation = xlPortrait
           Range(nm).PrintOut Copies:=1, Collate:=True
       End If
       j = 0
   Next nm
   Application.ScreenUpdating = True
End Sub
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Михаил С.

Все таки Excel - не тестовый редактор...
Может подумать - а есть ли смысл держать на одном листе десяток различных таблиц? Все равно, Вы видите не больше одной сразу....
Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053

Mihhail Mihhail

Цитата: Михаил С. от 27.02.2011, 12:52
Все таки Excel - не тестовый редактор...
Может подумать - а есть ли смысл держать на одном листе десяток различных таблиц? Все равно, Вы видите не больше одной сразу....

Я знал, что кто-нибудь так напишет )). У меня это не отдельные таблицы, а почти что текст, но густо насыщенный цифровыми и табличными данными. Практика показала, что это гораздо удобней все делать в Эксель, по крайней мере для моих задач, так что мой выбор в пользу Эксель  осознанный. Основное неудобство связано с распечаткой - на нее сейчас много времени трачу.
NULL

Serge 007

Цитата: Mihhail Mihhail от 27.02.2011, 21:40
Практика показала, что это гораздо удобней все делать в Эксель, по крайней мере для моих задач, так что мой выбор в пользу Эксель  осознанный. Основное неудобство связано с распечаткой - на нее сейчас много времени трачу.
Так и есть. Всегда в Excel делать удобнее. Просто Вы неправильно делаете.
ЗЫ Я вообще ничем кроме Экса не пользуюсь.
Дома даже офиса нет - только Экс.

ЗЫЗЫ Но если об этом юзеры узнают - это бунт будет.
Так что - платите мелкософту.
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

kuklp

Mihhail Mihhail, а Вы ответы читаете? Я кому старался?
А вообще, Серега, Михаилы вы одновременно и правы и не правы. Эксель может многое, но в предназначенных для других целей программах, те цели достигать проще и технологичней. Пример Ворд -Экс? Легко. Навскидку, попробуйте сверстать брошуру в Эксе. В Ворде - легко. Текстовый док МСДОС в Ворд - легко, в Экс - коряво. Обработка текстов в Эксе такой же нонсенс, как обработка таблиц в Ворд. Хотя и то и другое в принципе возможно.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Mihhail Mihhail

Цитата: KuklP от 27.02.2011, 08:30
Выход все же есть. Даете последовательные имена диапазонам(Prnt1, Prnt2...) и:
Sub MyPrn()
   Dim r As Range, nm, j&, i&
   Application.ScreenUpdating = False
   For Each nm In ActiveWorkbook.Names
       Set r = Range(nm)
       Application.Goto Reference:=nm.Name
       With r
           For i = 1 To .Columns.Count
               j = j + .Columns(i).Width
           Next
       End With
       If j > 432 Then    'здесь подберете нужное Вам число
           ActiveSheet.PageSetup.Orientation = xlLandscape
           Range(nm).PrintOut Copies:=1, Collate:=True
       Else
           ActiveSheet.PageSetup.Orientation = xlPortrait
           Range(nm).PrintOut Copies:=1, Collate:=True
       End If
       j = 0
   Next nm
   Application.ScreenUpdating = True
End Sub


KuklP, ответы читаю, спасибо что написал! Сижу уже час пытаюсь разобраться что к чему, между делом Сереге написал. Но знаний все-таки не хватает. Поясните пожалуйста, какое число я должен подобрать в коде? Число 432 это для примера? Что должно означать эта цифра?
NULL

kuklp

А просто попробовать? Создать два имени для портретного и ландшафтного диапазонов. в режиме отладки узнать чему будет равно j для портретного. Вот эту цифру и поставить вместо 432. Если попробовать не считая, может все и так получится(на моем принте работает на УРА).
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Wasilic

#13
Цитата: Mihhail Mihhail от 27.02.2011, 21:40
У меня это не отдельные таблицы, а почти что текст, но густо насыщенный цифровыми и табличными данными.
А не проще ли выложить этот лист, выделив участки для печати, или он содержит гос.секреты. Мы бы и покумекали. Вариантов может быть много.
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

Mihhail Mihhail

Цитата: KuklP от 27.02.2011, 22:38
А просто попробовать? Создать два имени для портретного и ландшафтного диапазонов. в режиме отладки узнать чему будет равно j для портретного. Вот эту цифру и поставить вместо 432. Если попробовать не считая, может все и так получится(на моем принте работает на УРА).

Прошу прощения, но по VBA у меня знания можно сказать начальные. Не могу понять что делать. Имена для диапазонов создал Print1 и Print2. Вставил Ваш код в редакторе VBA на Microsoft Excel Objects в тот лист, на котором у меня печатные диапазоны находятся. Запустил режим отладки. На строке кода Set r = Range(nm) выдается ошибка 1004  Application-defined or object-defined error.
NULL